描述
已知va和vb分别为非递减有序线性表,将va和vb进行合并为新的线性表vc,并保持vc仍然非递减有序。
本题中,线性表元素为整数。线性表的最大长度为1000。
输入
输入数据有多组,第一行为测试数据的组数n,接下来为2n行,每一组测试数据有两行:
第一行的第一个数为va的元素个数,后面是n个整数,代表va的所有元素
第二行的第一个数为vb的元素个数,后面是n个整数,代表vb的所有元素
输出
输出合并后的长度以及vc的所有元素
样例输入
2
2 1 2
2 2 3
3 1 2 3
3 4 5 6
2 1 2
2 2 3
3 1 2 3
3 4 5 6
样例输出
4 1 2 2 3
6 1 2 3 4 5 6
6 1 2 3 4 5 6
#include<iostream>
#include<stdlib.h>
#define MI 10
#define MX 20
using namespace std;
struct list
{
int *data;
int length;
int listsize;
};
int Inlist(list &l)
{
l.data=(int *)malloc(MI*sizeof(int));
if(!l.data)return 0;
l.length=0;
l.listsize=MI;
return 1;
}
int creata(list &l)
{
int n;
cin>>n;
l.data[l.length++]=n;
if(l.length>=l.listsize)
{
l.data=(int *)realloc(l.data,(l.listsize+MX)*(sizeof(int)));
if(!l.data)return 0;
l.listsize+=MX;
}
return 1;
}
int Xulist(list l,int i,int &e)
{
if(i<1||i>l.length)return 0;
e=l.data[i-1];
return 1;
}
int merge_list(list la,list lb,list &lc)
{
int i=1,j=1,ai,aj;
while(i<=la.length&&j<=lb.length){
Xulist(la,i,ai);Xulist(lb,j,aj);
if(ai<=aj){
lc.data[lc.length++]=ai;i++;
if(lc.length>=lc.listsize){
lc.data=(int *)realloc(lc.data,(lc.listsize+MX)*(sizeof(int)));
if(!lc.data)return 0;
lc.listsize+=MX;
}
}
else{
lc.data[lc.length++]=aj;j++;
if(lc.length>=lc.listsize){
lc.data=(int *)realloc(lc.data,(lc.listsize+MX)*(sizeof(int)));
if(!lc.data)return 0;
lc.listsize+=MX;
}
}
}
while(i<=la.length)
{
Xulist(la,i++,ai);
lc.data[lc.length++]=ai;
if(lc.length>=lc.listsize){
lc.data=(int *)realloc(lc.data,(lc.listsize+MX)*(sizeof(int)));
if(!lc.data)return 0;
lc.listsize+=MX;
}
}
while(j<=lb.length)
{
Xulist(lb,j++,aj);
lc.data[lc.length++]=aj;
if(lc.length>=lc.listsize){
lc.data=(int *)realloc(lc.data,(lc.listsize+MX)*(sizeof(int)));
if(!lc.data)return 0;
lc.listsize+=MX;
}
}
return 1;
}
int main()
{
int n;
list la,lb,lc;
cin>>n;
while(n--)
{
int a,b,i,ch;
cin>>a;
Inlist(la);
Inlist(lb);
Inlist(lc);
for(i=0;i<a;i++)
creata(la);
cin>>b;
for(i=0;i<b;i++)
creata(lb);
merge_list(la,lb,lc);
cout<<a+b<<" ";
for(i=0;i<lc.length-1;i++)
cout<<lc.data[i]<<" ";
cout<<lc.data[i]<<endl;
}
return 0;
}