描述
已知两非递减的顺序线性表,要求合并成一个新的非递减顺序线性表。
输入
输入包含四行,第一行为自然数n,表示第一个非递减顺序线性表的长度,第二行为n个自然数构成的非递减顺序线性表,第三行为自然数m,表示第二个非递减顺序线性表的长度,第四行为m个自然数构成的非递减顺序线性表。
输出
用一行输出合并后的非递减顺序线性表,各数之间用一个空格隔开。
样例输入
2
1 3
3
2 3 6
1 3
3
2 3 6
样例输出
1 2 3 3 6
#include<iostream> #include<stdlib.h> #define MI 10 #define MX 20 using namespace std; struct list { int *elem; int length; int listsize; }; void initializer_list(list &l) { l.elem=(int *)malloc(MI*sizeof(int)); l.length=0; l.listsize=MI; } void create(list &l,int n) { int i; for(i=0;i<n;i++) { if(l.length>=l.listsize) { l.elem=(int *)realloc(l.elem,(l.listsize+MX)*(sizeof(int))); if(!l.elem)return ; l.listsize+=MX; } cin>>l.elem[l.length++]; // cout<<l.elem[l.length-1]<<endl; } } int booll(list &l,int i,int &e) { if(i<0||i>l.length)return 0; e=l.elem[i]; return e; } void mergelist(list la,list lb,list &lc) { int i=0,j=0,ai,aj; while(i<la.length&&j<lb.length) { booll(la,i,ai);booll(lb,j,aj); // cout<<ai<<" "<<aj<<endl; if(lc.length>=lc.listsize) { lc.elem=(int *)realloc(lc.elem,(lc.listsize+MX)*(sizeof(int))); if(!lc.elem)return ; lc.listsize+=MX; } if(ai<=aj) { lc.elem[lc.length++]=ai;i++; } else { lc.elem[lc.length++]=aj;j++; } } while(i<la.length) { booll(la,i++,ai); if(lc.length>=lc.listsize) { lc.elem=(int *)realloc(lc.elem,(lc.listsize+MX)*(sizeof(int))); if(!lc.elem)return ; lc.listsize+=MX; } lc.elem[lc.length++]=ai; } while(j<lb.length) { booll(lb,j++,aj); if(lc.length>=lc.listsize) { lc.elem=(int *)realloc(lc.elem,(lc.listsize+MX)*(sizeof(int))); if(!lc.elem)return ; lc.listsize+=MX; } lc.elem[lc.length++]=aj; } } int main() { list la,lb,lc; int n,m; while(cin>>n) { initializer_list(la); initializer_list(lb); initializer_list(lc); create(la,n); cin>>m; create(lb,m); mergelist(la,lb,lc); for(int i=0;i<lc.length-1;i++) cout<<lc.elem[i]<<" "; cout<<lc.elem[lc.length-1]<<endl; } return 0; }