case 3:Inverlist();break;
case 4:Sortlist();break;
case 5:Insertlist();break;
case 6:Comlist();break;
case 7:Delelist();break;
case 0:flag=0;break;
default:printf("输入错误,请重新输入!\n");break;//输入数据不合法
}
printf("\n");
if(!flag)
break;
}
printf("谢谢使用!\n");
return 0;
}
//因为之前没有写过这样的操作菜单,所以很多地方没做好。比如说输入输出的数据没有对齐,整个排版看起来有些拥挤,每一次操作都会输出一次菜单。
//实验目的是测试各个函数的作用,写的时候除了创建顺序表的函数,其他函数后面我都加了一个输出函数,将按要求改变后的顺序表直接输出了。
//我将a、b、c数组和n、m都设置成了全局变量,方便代码的操作。
//因为创建函数没有设置形参,在合并数组的时候,我是先将a数组赋值给b数组,数组合并后将c数组再复制给a数组输出。这个是我事先没考虑到,下次改进。
//输出菜单可以放在函数里面,主函数中的代码看起来会简洁很多,之前也没想到。
//写完之后发现把删除数据的函数给漏掉了,后面又加上了。
//测试数据:a数组:5 2 5 3 4 1
//插入元素:第3位 7
//b数组:7 8 9 10 11 12 13 14
//删除数据: 第3位
#include
#define N 105
int a[N],b[N],c[N*2];
int n,m;
void Creatlist()//创建函数
{
int i;
printf("输入数据数量: ");
scanf("%d",&n);
printf("输入数据: ");
for(i=0;i
return ;
}
void Printlist()//打印函数
{
int i;
printf("顺序表长度n: %d\n",n);
printf("顺序表: ");
for(i=0;i
printf("\n");
return ;
}
void Inverlist()//逆序函数,逆序后直接输出
{
int r,l;
int temp;
for(l=0,r=n-1;l<=r;l++,r--)
{
temp=a[r];
a[r]=a[l];
a[l]=temp;
}
Printlist();
return ;
}
void Sortlist()//排序函数,用的是冒泡排序,因为不是实验重点,也就没太注意效率的问题。
{
int i,j;
int temp;
for(i=n-1;i>=1;i--)
{
for(j=0;j if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
Printlist();
return ;
}
void Insertlist()//插入函数
{
int x,y;
int temp0,temp1;
int i;
printf("插入数据的位置: ");
scanf("%d",&x);
printf("插入数据的数值: ");
scanf("%d",&y);
temp0=a[x-1];
a[x-1]=y;
for(i=x;i
temp1=a[i];
a[i]=temp0;
}
a[i]=temp0;
n++;
Printlist();
return ;
}
void Comlist()//合并函数,在这个函数中重新输入了一个数组
{
int i,j,k;
for(i=0;i
m=n;
Creatlist();
i=j=k=0;
while(i
if(a[i] {
c[k++]=a[i];
i++;
}
else if(a[i]>=b[j]&&i
c[k++]=b[j];
j++;
}
else if(i==n)
{
c[k++]=b[j];
j++;
}
else
{
c[k++]=a[i];
i++;
}
}
for(i=0;i
n=k;
Printlist();
return ;
}
void Delelist()
{
int x;
int i;
printf("需要删除的数据的位置: ");
scanf("%d",&x);
a[x-1]=a[x];
for(i=x;i
n--;
Printlist();
return ;
}
int main()
{
int T;
int flag;
flag=1;
while(1)//永真循环,在输入0是跳出
{
printf("*********目录*********\n");
printf("创建一个顺序表: 1\n");
printf("输出顺序表及其长度: 2\n");
printf("将顺序表逆置: 3\n");
printf("将顺序表升序排序: 4\n");
printf("将一个值插入顺序表: 5\n");
printf("将两个有序表合并输出:6\n");
printf("删除表中的某个元素: 7\n");
printf("结束操作: 0\n");
printf("请输入操作代码: ");
scanf("%d",&T);
switch(T)
{
case 1:Creatlist();break;
case 2:Printlist();break;
case 3:Inverlist();break;
case 4:Sortlist();break;
case 5:Insertlist();break;
case 6:Comlist();break;
case 7:Delelist();break;
case 0:flag=0;break;
default:printf("输入错误,请重新输入!\n");break;//输入数据不合法
}
printf("\n");
if(!flag)
break;
}
printf("谢谢使用!\n");
return 0;
}