Description
假定两个顺序表的数据已经按照从小到大的顺序排列,实现两个顺序表的合并
Input
第一行输入n表示顺序表A包含的·n个数据
第二行输入n个数据,数据是小于100的正整数
第三行输入m表示顺序表B包含的·n个数据
第二行输入m个数据,数据是小于100的正整数
Output
输出合并后的顺序表内的所有数据,数据之间用空格隔开
Sample Input
3 11 33 55 4 22 44 66 88
Sample Output
11 22 33 44 55 66 88
#include <stdio.h>
#include <malloc.h>
typedef struct
{
int *elem;
int length;
}SqList;
int InitList_sq(SqList &A, int n)
{
A.elem=(int *)malloc(n*sizeof(int));
if(!A.elem)
return 0;
A.length=n;
return 1;
}
int Load_Sq(SqList &L)
{
int i;
if(L.length == 0)
return 0;
else
{
for(i=0;i <L.length;i++)
printf("%d ",L.elem[i]);
}
printf("\n");
return 1;
}
SqList MergeList_Sq(SqList &A,SqList &B, SqList &C)
{
int *pa=A.elem;
int *pb=B.elem;
C.length=A.length + B.length;
int *pc=C.elem=(int * )malloc(C.length * sizeof(int));
int *pa_last=A.elem + A.length;
int *pb_last=B.elem + B.length;
while((pa<pa_last)&&(pb <pb_last))
{
if(*pa <=*pb)
*pc++ = *pa++;
else
*pc++ = *pb++;
}
while(pa<pa_last)
*pc++=*pa++;
while(pb <pb_last)
*pc++=*pb++;
return C;
}
int main()
{
SqList A, B, C;
int na,nb;
scanf("%d",&na);
InitList_sq(A,na);
for(int i=0;i<na;i++)
{
scanf("%d",&A.elem[i]);
}
scanf("%d",&nb);
InitList_sq(B,nb);
for(int j=0;j<nb;j++)
{
scanf("%d",&B.elem[j]);
}
MergeList_Sq(A,B,C);
Load_Sq(C);
return 0;
}