永发信息网

一个线性表的编程

答案:2  悬赏:0  手机版
解决时间 2021-07-30 03:25
  • 提问者网友:疯子也有疯子的情调
  • 2021-07-29 17:51

主要实验内容:

1、 建立一个顺序存储的线性表,实现线性表的插入、删除操作

要求:

(1)建立一个按关键字有序的线性表,从键盘上输入一个数,将该数插入到表中,使该线性表插入数据后仍按关键字有序

(2)建立一个线性表,从键盘上输入一个数,查找表中是否存在该数,若有则删除所有与该数相等的数。

C/C++都可以~

测试通过后给分,帮帮忙~

最佳答案
  • 五星知识达人网友:西风乍起
  • 2021-07-29 17:59

//花了一个晚上和这个中午的时间,终于做好了,可以再VC 6.0里正确运行,基本可以到达你的要求,代码:


#include<iostream.h>
typedef int datatype; //线性表结点的数据类型,假设是 int
const int maxsize=100; //线性表可能的最大长度,这里假设是 100;
typedef struct{
datatype data[maxsize+1]; // 定义线性表的数据
int n; //线性表的长度
}sqlist;


//建表
sqlist* creat()
{
datatype x;
int i=1;
sqlist *L;
L=new sqlist;
while(cin>>x,x!=0)
{
L->data[i]=x;
i++;
}
L->n=i-1;
L->data[0]=L->n;
return L;
}


//插入函数
int insert(sqlist *L,datatype x,int i) { //将 x 插入到顺序表 L得到第 i 个位置
int j;
if(L->n==maxsize) { cout<<"表满,不能插入!(上溢)\n"; return -1; }
if(i<1 || i>L->n+1) {cout<<"非法插入位置!\n"; return 0; }
L->n++;
for(j=L->n;j>i;j--)
L->data[j]=L->data[j-1]; //结点后移
L->data[i]=x;
return 1;
}


//删除函数
int deletex(sqlist *L,datatype x) {
if(L->n==0) { cout<<"表空,不能删除!(下溢)\n"; return 0;}
for(int j=1;j<=L->n;j++)
if(L->data[j]==x) //查找 匹配值 x
for(;j<=L->n;j++)
L->data[j]=L->data[j+1]; //结点前移
L->n--;
return 1;
}

//显示顺序表
void disp(sqlist *L)
{
cout<<"顺序表的表长为 "<<L->n<<"\n 数据:\n";
for(int i=1;i<=L->n;i++)
cout<<"序号: "<<i<<" 数据: "<<L->data[i]<<endl;
}



void main()
{
sqlist *L=NULL;
datatype x;
int ch,i;
XX: while(1)
{
cout<<" 主菜单 \n "
<<" 0.退出\n "
<<" 1.建立顺序表\n "
<<" 2.插入数据\n "
<<" 3.删除数据\n "
<<" 4.显示顺序表\n ";
cin>>ch;
switch(ch)
{
case 0:
delete(L); //退出程序,撤销顺序表
return;
break;
case 1:
cout<<"请输入顺序表的数据(输入 0 退出!)"<<endl;
L=creat();
cout<<"顺序表已建成!\n";
break;
case 2:
cout<<"请输入您要插入的值\n";
cin>>x;
cout<<"插入的位置:\n";
cin>>i;
if( insert(L,x,i)==1 ) cout<<"插入成功!"<<endl;
else cout<<"插入失败! "<<endl;
break;
case 3:
cout<<"请输入您要删除的值\n";
cin>>x;
if(deletex(L,x)==1) cout<<"成功删除数据 "<<x<<endl;
else cout<<"该顺序表没有数据 "<<x<<endl;
break;
case 4:
disp(L);
break;
default:
cout<<" 输入非法! 请输入 0~4选项!"<<endl;
goto XX;

}
}
}
//如果,还有什么问题,欢迎追问!.^_^.

全部回答
  • 1楼网友:过活
  • 2021-07-29 19:21
第一个: #include <stdio.h> int* binary_search( int* beg, int* end, int val ) { int* mid; while( beg < end ) { mid = beg + ( (end - beg) >> 1 ); if( *mid == val ) return mid; else if( *mid < val ) beg = mid + 1; else end = mid; } return beg; } int main() { int a[] = { 1,1,2,3,5,5,6,7,8,9,-1 }; int b, *p, *q; for( p = a; *p != -1; ++p ) printf( "%d ", *p ); putchar( '\n' ); scanf( "%d", &b ); p = binary_search( a, a + 10, b ); for( q = a + 10; q != p; --q ) *q = q[-1]; *p = b; for( p = a; p != a + 11; ++p ) printf( "%d ", *p ); return 0; } 第二个,单链表查找删除: #include <stdio.h> #include <stdlib.h> typedef struct _list { int val; struct _list* next; } *node, list; node Insert( node* head, node pos, int val ) { node tmp; tmp = ( node )malloc( sizeof( list ) ); tmp->val = val; tmp->next = pos ? pos->next : *head; if ( pos ) { pos->next = tmp; } else { *head = tmp; } return tmp; } node Find( node head, int n ) { if ( !head ) return NULL; while ( head && head->val != n ) { head = head->next; } return head; } node Create( int* beg, int* end ) { node head, t; head = t = NULL; while ( beg != end ) { t = Insert( &head, t, *beg++ ); } return head; } void Remove( node* head, node n ) { node prev, next; prev = next = *head; while ( next != n ) { prev = next; next = next->next; } if ( prev == *head ) { *head = next->next; } else { prev->next = next->next; } free( next ); } void Print( node head ) { while ( head ) { printf( "%d ", head->val ); head = head->next; } putchar( '\n' ); } int main() { int a[] = { 6,1,3,9,2,8,5,0,7,4 }; int n; node head, pos; head = Create( a, a + 10 ); Print( head ); printf( "plz enter a num:" ); scanf( "%d", &n ); while( ( pos = Find( head, n ) ) != NULL ) { Remove( &head, pos ); } printf( "after delete all node with value %d:\n", n ); Print( head ); return 0; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯