数据结构试验 顺序表
2013-06-06 14:09
267 查看
编写一个完整的程序,实现顺序表的建立、插入、删除、输出等基本运算。
(1) 建立一个顺序表,含有n个数据元素。
(2) 输出顺序表及顺序表的长度。
(3) 在顺序表中删除值为x的结点或者删除给定位置i的结点。
(4) 将顺序表就地逆置,即利用原表的存储空间将线性表(a1,a2,...,an)逆置为(an,an-1,...,a1)。
(5) 将顺序表按升序排序。
(6) 设顺序表中的数据元素递增有序,将x插入到顺序表的适当位置上,以保持该表的有序性。
(7) 将两个顺序有序表A和B合并为一个有序表C。
在主函数中设计一个简单的菜单,分别测试上述算法
(1) 建立一个顺序表,含有n个数据元素。
(2) 输出顺序表及顺序表的长度。
(3) 在顺序表中删除值为x的结点或者删除给定位置i的结点。
(4) 将顺序表就地逆置,即利用原表的存储空间将线性表(a1,a2,...,an)逆置为(an,an-1,...,a1)。
(5) 将顺序表按升序排序。
(6) 设顺序表中的数据元素递增有序,将x插入到顺序表的适当位置上,以保持该表的有序性。
(7) 将两个顺序有序表A和B合并为一个有序表C。
在主函数中设计一个简单的菜单,分别测试上述算法
//因为之前没有写过这样的操作菜单,所以很多地方没做好。比如说输入输出的数据没有对齐,整个排版看起来有些拥挤,每一次操作都会输出一次菜单。 //实验目的是测试各个函数的作用,写的时候除了创建顺序表的函数,其他函数后面我都加了一个输出函数,将按要求改变后的顺序表直接输出了。 //我将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<stdio.h> #define N 105 int a ,b ,c[N*2]; int n,m; void Creatlist()//创建函数 { int i; printf("输入数据数量: "); scanf("%d",&n); printf("输入数据: "); for(i=0;i<n;i++) scanf("%d",&a[i]); return ; } void Printlist()//打印函数 { int i; printf("顺序表长度n: %d\n",n); printf("顺序表: "); for(i=0;i<n;i++) printf("%d ",a[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<i;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<n;i++) { temp1=a[i]; a[i]=temp0; temp0=temp1; } a[i]=temp0; n++; Printlist(); return ; } void Comlist()//合并函数,在这个函数中重新输入了一个数组 { int i,j,k; for(i=0;i<n;i++) b[i]=a[i]; m=n; Creatlist(); i=j=k=0; while(i<n||j<m) { if(a[i]<b[j]&&i<n&&j<m) { c[k++]=a[i]; i++; } else if(a[i]>=b[j]&&i<n&&j<m) { c[k++]=b[j]; j++; } else if(i==n) { c[k++]=b[j]; j++; } else { c[k++]=a[i]; i++; } } for(i=0;i<k;i++) a[i]=c[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-1;i++) a[i]=a[i+1]; 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; }
相关文章推荐
- 数据结构实践——顺序表应用
- 数据结构C#类库(1)——顺序表
- C++_012_数据结构_栈_顺序表储存版
- 【数据结构】C语言实现顺序表(动态顺序表)
- 数据结构(c)——线性表:顺序表和链式表
- c语言实现数据结构中的顺序表
- 【数据结构】-线性表-顺序表-1323: 算法2-1:集合union
- 基本数据结构之线性表-顺序表
- 数据结构实践——初始化顺序表怎么就内存溢出了?
- 【数据结构】-线性表-顺序表 熟练度max=5(用一个变量实现min和循环变量i的功能)
- 第3周SHH数据结构—【项目4-顺序表应用问题(2)】
- [数据结构]程杰《大话数据结构》书中的顺序表源码
- 数据结构基础1_顺序表
- 数据结构:动态实现顺序表
- 2015年大二上-数据结构-顺序表(2)-奇右偶左
- C++数据结构--顺序表
- 数据结构顺序表
- 数据结构学习笔记1——顺序表
- 数据结构之简单的顺序表
- 数据结构总结:(一)顺序表