1、/ 输出顺序表中的所有元素 int i; if(_) printf(The List is empty!); / 请填空 else printf(The List is: for(_) printf(%d ,_); printf(n return OK;int ListInsert_Sq(SqList &L,int i,int e)/ 算法2.4,在顺序线性表L中第i个位置之前插入新的元素e/ i的合法值为1iL.length +1int ListDelete_Sq(SqList &L,int i, int &e)/ 算法2.5,在顺序线性表L中删除第i个位置的元素,并用e返回其值/ i的合法
2、值为1iL.lengthint main() SqList T; int a, i; ElemType e, x; if(_) / 判断顺序表是否创建成功A Sequence List Has Created.n while(1)1:Insert elementn2:Delete elementn3:Load all elementsn0:ExitnPlease choose: scanf(%d,&a); switch(a) case 1: scanf(%d%di,&x); if(_) printf(Insert Error! / 判断i值是否合法,请填空 else printf(The El
3、ement %d is Successfully Inserted!, x); break; case 2:i);Delete Error!The Element %d is Successfully Deleted!, e); case 3: Load_Sq(T); case 0: return 1; 输入格式测试样例格式说明:根据菜单操作:1、输入1,表示要实现插入操作,紧跟着要输入插入的位置和元素,用空格分开2、输入2,表示要实现删除操作,紧跟着要输入删除的位置3、输入3,表示要输出顺序表的所有元素4、输入0,表示程序结束输入样例11 21 323输出样例A Sequence List
4、Has Created.Insert element2:Delete element3:Load all elements0:ExitPlease choose:The Element 2 is Successfully Inserted!The Element 3 is Successfully Inserted!The Element 3 is Successfully Deleted! 2 作者yqm 解法一:(正规解法)#define OK 1 L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType); L.length=0; L
5、.listsize=LIST_INIT_SIZE; return 0; if(L.length=0) printf( for(i=0;iL.length;i+) printf(,L.elemi); ElemType *newbase,*p,*q; if(iL.length+1)return ERROR; if(L.length=L.listsize) newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType); L.elem=newbase; L.listsize+=LISTINCREMENT; q
6、=&(L.elemi-1); for(p=&(L.elemL.length-1);p=q;-p) *(p+1)=*p; *q=e; +L.length; ElemType *p,*q;L.length)return ERROR; p=& e=*p; q=L.elem+L.length-1; for(+p;pusing namespace std; list T; int e, x; switch(a) case 1:(int)T.size()+1) printf( / 判断i值是否合法 int j=1,p=0;:iterator iter=T.begin(); if(i=1) T.push_f
7、ront(x); p=1; while(iter!=T.end() if(j=i&i!=1) T.insert(iter,x); iter+; break; j+;p) T.push_back(x); case 2:(int)T.size() printf( int j=1;iterator iter; for(iter=T.begin();iter!=T.end();+iter) if(j=i)iterator tmp; tmp=iter; e=*iter; T.erase(tmp); case 3: if(T.empty()iterator plist; for(plist = T.beg
8、in(); plist != T.end(); plist+),*plist); case 0:解法三:(数组)string.h int T1000; memset(T,0,sizeof(T); int a, i,k=1,e, x;k) printf( for(int j=k-1; j=i; j-) Tj+1=Tj; Ti=x; k+;k-1) printf( e=Ti; for(int j=i; j#define OVERFLOW -2 SqList;L,int n) L.elem=(ElemType *)malloc(n*sizeof(ElemType); L.listsize=n; L.
9、length=n; for(i=0; i i+)L.elemi); if(L.length=0) return 0;L.length-1;,L.elemL.length-1); /if(ch=A)ch=B; /else if(ch=Cvoid mergeList_Sq(SqList La,SqList Lb,SqList &Lc) int *pa,*pb,*pc,*pa_last,*pb_last; pa=La.elem; pb=Lb.elem; Lc.listsize=Lc.length=La.length+Lb.length; pc=Lc.elem=(ElemType*)malloc(Lc
10、.listsize*sizeof(ElemType);Lc.elem)exit(OVERFLOW); pa_last=La.elem+La.length-1; pb_last=Lb.elem+Lb.length-1; while(pa=pa_last&pb=pb_last) if(*pa=*pb) *pc+=*pa+; *pc+=*pb+;=pa_last) while(pb SqList T,R,Y; int a, b; InitList_Sq(T,a);b); InitList_Sq(R,b); mergeList_Sq(T,R,Y); Load_Sq(R); Load_Sq(Y);解法二
11、(C+STL list)void load(list L) for(plist = L.begin();= L.end(); T,R; int a,b,x; for(int i=0;a;b; R.push_back(x); load(T); load(R); T.merge(R);int InitList_Sq(int L,int n)n;Li);int Load_Sq(int L,int n) if(n=0) return 0;,Li);void mergeList_Sq(int a,int b,int c,int a_length,int b_length) int i=0,j=0,k=0; while(ia_len