顺序表的创建,插入,删除,查找,以及两个有序表的的合并 *** 作
数据结构书里的算法,就不详细说明啦!
代码
#include#include #include #include #define MAXSIZE 100 typedef int ElemType; typedef struct { ElemType *elem; int Length; }Sqlist; void InitList(Sqlist *L){//顺序表的创建! L->elem=(ElemType*)malloc(MAXSIZE*sizeof(ElemType)); // printf("%d",sizeof(L)); L->Length=0; if(L->elem==NULL) printf("顺序表创建失败!n"); else printf("顺序表创建成功!n"); } void InsertList(Sqlist *L,int i,ElemType e){//插入 *** 作,在第i个位置插入元素e if(i<1||i>L->Length+1) {//第Length个位置也可以插入! printf("插入位置错误!n"); return; } if(L->Length==MAXSIZE) { printf("顺序表空间不足!n"); return; } int j; for(j=L->Length-1;j>=i-1;--j){//j>=i-1,第i个元素也要移动! L->elem[j+1]=L->elem[j]; } L->elem[i-1]=e; ++L->Length; printf("将元素%d插入第%d个位置成功!n",e,i); } ElemType DeleteList(Sqlist *L,int i){//删除第i个位置的元素并且返回它的值 if(i<1||i>L->Length) { printf("删除位置不合法!n"); return 0; } int e=L->elem[i-1]; int j; for(j=i;j Length;j++){ L->elem[j-1]=L->elem[j]; } --L->Length; printf("删除元素成功!n"); return e; } void Display(Sqlist *L){ int i; printf("输出顺序表所有的元素:n"); for(i=0;i Length;i++){ printf("%5d",L->elem[i]); } printf("n"); } int LocateList(Sqlist *L,ElemType e){//查找值为e的元素并返回该元素的位置 ,失败则返回-1 int i=0; while(L->elem[i]!=e&&i Length) i++; if(i==L->Length) { printf("查找失败!n"); return -1; } return i+1; } void MergeList_Sq(Sqlist La,Sqlist Lb,Sqlist &Lc){ Lc.Length=La.Length+Lb.Length; int i,j; ElemType *pa,*pb,*pc; pc = Lc.elem; pa = La.elem; pb = Lb.elem; ElemType *pa_last,*pb_last; pa_last = pa + (La.Length-1); pb_last = pb + (Lb.Length-1); while(pa<=pa_last&&pb<=pb_last) { if(*pa<*pb) *pc++=*pa++; else *pc++=*pb++; } while(pb<=pb_last) *(pc++) = *(pb++); while(pa<=pa_last) *(pc++) = *(pa++); } int main(){ Sqlist List; Sqlist *L=&List; int i,e; //测试创建 InitList(L); printf("请输入顺序表的大小:n"); scanf("%d",&L->Length); printf("请输入%d个元素:n",L->Length); for( i=0;i Length;i++){ scanf("%d",&L->elem[i]); } //测试输出 Display(L); //测试插入 printf("请输入插入的元素和位置:n"); scanf("%d %d",&e,&i); InsertList(L,i,e); Display(L); //测试删除 printf("请输入删除元素的位置:n"); scanf("%d",&i); e=DeleteList(L,i); printf("所删除元素为%dn",e); Display(L); //测试查找 printf("请输入要查找的元素:n"); scanf("%d",&e); i=LocateList(L,e); if(i!=-1) printf("该元素所在位置为%dn",i); //测试合并 Sqlist La,Lb,Lc; InitList(&La); InitList(&Lb); La.Length=5; Lb.Length=5; InitList(&Lc); printf("请输入La的大小:n"); scanf("%d",&La.Length); printf("请输入Lb的大小:n"); scanf("%d",&Lb.Length); printf("请输入La中%d个递增的元素:n",La.Length); for(i=0;i 测试结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)