数据结构C语言版之线性表
//顺序表: #include<stdio.h> #include<stdlib.h> #define maxlength 20 #define listincreament 10 typedef struct { int *elem; int length; int listsize; }sqlist; void T_creat(sqlist &l) { l.elem=(int*)malloc(maxlength*sizeof(int)); if(!l.elem) exit(0); printf("输入表的长度:\n"); scanf("%d",&l.length); printf("输入数据元素:\n"); for(int i=0;i<l.length;i++) scanf("%d",&l.elem[i]); l.listsize=l.length; } void travel(sqlist &l) { int i; for(i=0;i<l.length;i++) printf("%5d",l.elem[i]); printf("\n"); } void locationelem(sqlist &l,int e) { int i,k; int flag=1; for(i=0;i<l.length&&flag;i++) { if(l.elem[i]==e) { k=i; flag=0; } } if(!flag) printf("查找成功,该元素为数序表中第%d个数\n",k+1); else printf("查找失败\n"); } void delete1(sqlist &l,int addr) { int i; for(i=addr-1;i<l.length;i++) l.elem[i]=l.elem[i+1]; l.listsize=l.length-1; l.length=l.length-1; } void insert(sqlist &l,int a,int elem) { int i; l.elem=(int*)realloc(l.elem,listincreament*sizeof(int)); l.listsize=maxlength+listincreament; for(i=l.length;i>a-1;i--) { l.elem[i]=l.elem[i-1]; } l.elem[a-1]=elem; l.length+=1; } void merge(sqlist &la,sqlist &lb,sqlist &lc) { int i,j,k; lc.elem=(int*)malloc((la.length+lb.length)*sizeof(int)); lc.listsize=la.length+lb.length; lc.length=0; i=j=k=0; while(i<la.length&&j<lb.length){ if(la.elem[i]<lb.elem[j]) lc.elem[k++]=la.elem[i++]; else if(la.elem[i]>lb.elem[j]) lc.elem[k++]=lb.elem[j++]; else { lc.elem[k++]=la.elem[i]; i++;j++; } } while(i<la.length) lc.elem[k++]=la.elem[i++]; while(j<lb.length) lc.elem[k++]=lb.elem[j++]; lc.length=k; }
<pre name="code" class="cpp">int main() { sqlist L,la,lb,lc; int m,n,s,r; T_creat(L); printf("输入要查找的数:\n"); scanf("%d",&m); locationelem(L,m); printf("输入要删除的数的位置:\n"); scanf("%d",&n); delete1(L,n); travel(L); printf("输入要插入的位置及要插入的数:\n"); scanf("%d",&s); scanf("%d",&r); insert(L,s,r); travel(L);*/ printf("请输入要合并的两表数据(递增有序):\n"); T_creat(la); T_creat(lb); printf("两表合并后为:\n"); merge(la,lb,lc); travel(lc); return 0; }
不为失败找原因,要为成功找方法!