C语言 简单的归并问题

来源:百度知道 编辑:UC知道 时间:2024/06/21 09:10:37
已知线性表LA和LB中的数据元素按值非递减,现要求把LA和LB归并为一个新的线性表LC,且LC中的数据元素扔按值非递减。例:

LA=(3,5,8,11)
LB=(2,6,8,9,11,15,20)

LC=(2,3,5,6,8,8,9,11,11,15,20);

Input
第一行是测试数据的组数n。
每组测试数据占两行,其中第2i+1行(i = 0,1,2,...)首先是LA中的元素个数na,之后是na个元素。第2i+2行首先是LB中的元素个数nb,之后是nb个元素。

Output
n行,每行输出LA、LB合并后的LC。LC的数据之间以空格区分,LC最后一个数据之后没有空格。

建议用两种方式实现,
1)线性表的顺序存储
2)线性表的链式存储

Sample Input
2
2 1 2
1 3
4 3 5 8 11
7 2 6 8 9 11 15 20

Sample Output
1 2 3
2 3 5 6 8 8 9 11 11 15 20
这个问题估计 需要时间构思 ,偶会有加分的。(如果有相似的例题给我参考也行。)

描述:这个问题是个类似于归并排序的问题,相当简单,只需每次将表中较小的元素提取出来,直至两表都为空为止,组成的新表即为所求。
核心代码(处理一组数据):
void fun(int a[],int b[],int n,int m){
/*数据存放在数组c中*/
int i=0,j=0,k=0;
for (k=0;k<n+m;k++){
if(i>=n||a[i]>b[j]) {c[k]=b[j];j++;continue;}
if(j>=m||a[i]<b[j]) {c[k]=a[i];i++;continue;}
}
}
/*请注意检查语法错误,不过出现的几率性很小*/