思想:
就是创建一个新表,小的先放表里头就好,最后还没放完的那个数组单独加到新表后面去
#include<iostream>
using namespace std;
typedef struct
{
int *elem;
int len;
int size;
}list;
int initial(list &L,int len)
{
L.elem = new int[len];
if (!L.elem) return 0; // 存储分配失败
L.len = len; // 空表长度为0
L.size = len; // 初始存储容量
return 1;
}
int merge(list a,list b,list c)
{
int *al,*bl,*cl;
al=a.elem+a.len-1;
bl=b.elem+b.len-1;
while(a.elem<=al&&b.elem<=bl)
{
if(*a.elem<=*b.elem) *c.elem++=*a.elem++;
else *c.elem++=*b.elem++;
}
while(a.elem<=al) *c.elem++=*a.elem++;
while(b.elem<=bl) *c.elem++=*b.elem++;
}
int main()
{
list a,b,c;
int anum,bnum;
cin>>anum;initial(a,anum);
a.len=anum;a.size=anum;
for(int i=0;i<anum;i++)cin>>a.elem[i];
cin>>bnum;initial(b,bnum);
b.len=bnum;b.size=bnum;
for(int i=0;i<bnum;i++)cin>>b.elem[i];
initial(c,anum+bnum);
merge(a,b,c);
cout<<"List A:";
for(int i=0;i<=a.len-1;i++)
cout<<a.elem[i]<<" ";
cout<<endl;
cout<<"List B:";
for(int i=0;i<=b.len-1;i++)
cout<<b.elem[i]<<" ";
cout<<endl;
cout<<"List C:";
for(int i=0;i<=c.len-1;i++)
cout<<c.elem[i]<<" ";
cout<<endl;
return 0;
}