实验1——顺序表的合并
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; }