第一次数据结构作业
2012-04-15 22:21 璋廊 阅读(273) 评论(0) 编辑 收藏 举报编写一个完整的程序,实现顺序表的建立、插入、删除、输出等基本运算。
(1) 建立一个顺序表,含有n个数据元素。
(2) 输出顺序表及顺序表的长度。
(3) 在顺序表给定的位置i,插入一个值为x的结点。
(4) 在顺序表中删除值为x的结点或者删除给定位置i的结点。
(5) 将顺序表逆置,将结果保存到另外的顺序表中。
(6) 将顺序表按升序排序。
(7) 将两个顺序有序表A和B合并为一个有序表C。
(8) 在主函数中设计一个简单的菜单,分别测试上述算法。
综合训练:利用顺序表实现一个班级学生信息管理(数据录入、插入、删除、排序、查找等)
#include<stdio.h> int Delete(int *s,int x,int n)//删除所有值为x的元素; { int i=0,p=0,k=0; while(i<n) { if(s[i]==x) { p++; s[k]=s[i++]; } else { s[k++]=s[i++]; } } return p; } void print(int *s,int n)//输出数组元素; { int i=0; while(i<n) { printf("%d ",s[i++]); } printf("\n"); } void Invert(int *s,int n)//倒置; { int t,i; if(n==1) return ; for(i=0;i<n/2;i++) { t=s[i]; s[i]=s[n-i-1]; s[n-i-1]=t; } } void Sort(int *s,int n)//冒泡排序; { int i,j,t; for(i=1;i<n;i++) for(j=0;j<n-i;j++) { if(s[j]<s[j+1]) { t=s[j]; s[j]=s[j+1]; s[j+1]=t; } } } void Add(int *s,int x,int n)//插入一个元素: { int i=n-1,k=n,p=0; while(i>=0) { if(s[i]<=x) { s[k]=s[i]; k--;i--; } else{ s[k]=x;break; } } } void hebin(int *a,int n,int *b,int m,int *c)//合并的有序数组: { int i=0,j=0,k=0; while(i<n&&j<m) { if(a[i]>b[j]) { c[k++]=b[j++]; } else { c[k++]=a[i++]; } } if(i<n) while(i<n) { c[k++]=a[i++]; } else while(j<m) { c[k++]=b[j++]; } } int main() { int s[101]; int i,n,x; printf("输入一个数n表示n个数据元素!\n"); scanf("%d",&n); printf("随机输入n个数!\n"); for(i=0;i<n;i++) scanf("%d",&s[i]); printf("顺序表的长度%d\n",n); printf("输入一个数x删除所有值为x的元素!\n"); scanf("%d",&x); int p=Delete(s,x,n); n=n-p; if(p==0) printf("顺序表里没有%d\n",x); else{ printf("删除x后的顺序表\n"); print(s,n); } Invert(s,n); printf("倒置后的数组!\n"); print(s,n); Sort(s,n); printf("排序后的数组!\n"); print(s,n); printf("输入一个值!\n"); scanf("%d",&x); Add(s,x,n); printf("插入后的数组!\n"); print(s,n+1); printf("将数组1,2,3,4,5") int a[5]={1,3,5,7,9}; int b[5]={0,2,4,6,8}; int c[101]; hebin(a,5,b,5,c); print(c,10); return 0; }