7-3 合并顺序表 (25 分)
假设有两个由小到大有序的有序顺序表A和B,现要求将表A和表B并入表C中,且表C仍保持由小到大的有序性。若合并后的顺序表表长超过总容量20,则输出“not enough”。
输入格式:
第一行为一个数字n,表示下面有n组数据,每组数据包括4行;每组数据中的第一行表示表A的表长,第二行表示表A的数据元素,第三行表示表B的表长,第四行表示表B的数据元素。
输出格式:
若合并成功,输出两行信息,第一行表示合并后表C的表长,第二行表示合并后表C的数据元素,每两个元素之间用一个空格分隔;若合并后的顺序表表长超过总容量20,则输出“not enough”。
输入样例:
在这里给出一组输入。例如:
1
4
1 3 8 17
3
6 10 15
结尾无空行
输出样例:
在这里给出相应的输出。例如:
7
1 3 6 8 10 15 17
结尾无空行
#include<stdio.h>
int main(void)
{
int n;
int p[10000],q[10000];
int t;
int a,b,j,i,k;
while(~scanf("%d",&n))//输入多组数据
{
while(n--)
{
t=0;
scanf("%d",&a);
for(i=0;i<a;i++)
scanf("%d",&p[i]);
scanf("%d",&b);
for(i=0;i<b;i++)
scanf("%d",&q[i]);
t=a+b;
if(t>20)
printf("not enough");
else
{
for(i=0;i<t;i++)//将q数组的每个元素都插到p数组中去,及得到新的顺序表
p[i+a]=q[i];
for(j=1;j<t;j++)//在将其进行排序,这边选择了冒泡排序
{
for(i=0;i<t-j;i++)
{
if(p[i]>p[i+1])
{
k=p[i];
p[i]=p[i+1];
p[i+1]=t;
}
}
}
printf("%d\n",t);
for(i=0;i<t;i++)//将各个数依次打印输出
printf("%d ",p[i]);
printf("%d\n",p[t-1]);
}
}
}
}