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;
}