PS:自己编写顺序表函数
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #define LIST_INIT_SIZE 100 #define LISTADD 10 struct sq { int *elem; int length; int listsize; }; void Init(sq &L)//&-引用-对本身操作 { //申请一个int 的空间 L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));//100个空间; L.length=0; L.listsize=LIST_INIT_SIZE;//初始化最大空间 } int insertscanf(sq &L,int i,int value)//在第i个位置插入value { //先检查i的合法性 if(i>L.listsize+1||i<1) return -1; if(L.length>=L.listsize)//重新分配空间 { L.elem=(int *)realloc(L.elem,(LISTADD+LIST_INIT_SIZE)*sizeof(int));//realloc()不会覆盖以前的数据 L.listsize+=LISTADD; } for(int j=L.length-1;j>=i-1;j--){ L.elem[j+1]=L.elem[j]; } L.elem[i-1]=value; L.length++; return 1; } char a[100005]; void print(sq &L) { int now = 0; int len=strlen(a); for(int i=0;i<len;i++){ if(a[i]==' ') { insertscanf(L,L.length+1,now); now=0; } else if(a[i]=='#') { insertscanf(L,L.length+1,now); break; } else{ now*=10; now+=(a[i]-'0'); } } } void mergelist(sq &L1,sq L2,sq L3)//L2,L3只需要用赋值体,L1引用 { int i=0,j=0; int k=0; while(i<=L2.length-1&&j<=L3.length-1){ if(L2.elem[i]<L3.elem[j]){ L1.elem[k++]=L2.elem[i++]; } else{ L1.elem[k++]=L3.elem[j++]; } } while(j<=L3.length-1) { L1.elem[k++]=L3.elem[j++]; } while(i<=L2.length-1) { L1.elem[k++]=L2.elem[i++]; } L1.length=k; } void output(sq L1) { for(int i=0;i<L1.length;i++){ printf("%d ",L1.elem[i]); } printf("\n"); } int main() { sq sq1,sq2,sq3; Init(sq1); Init(sq2); Init(sq3); int n=0; int m=0; gets(a); print(sq2); gets(a); print(sq3); output(sq2); output(sq3); mergelist(sq1,sq2,sq3); output(sq1); //printf("%d\n",sq1.length); }