将两个有序顺序表合并为一个新的有序顺序表,输出合并后的顺序表的所有数据元素;
#include<stdio.h> #include<stdlib.h> #define LIST_INIT_SIZE 100 #define LISTINCREMENT 20 typedef struct { int *elem; int length; int listsize; }SqList; bool InitList_Sq(SqList &L); void PrintElem_Sq(SqList L); void MergeList_Sq(SqList La, SqList Lb, SqList &Lc); int main() { SqList La, Lb, Lc; InitList_Sq(La); InitList_Sq(Lb); InitList_Sq(Lc); printf("输入第一个有序顺序表的元素个数:"); scanf("%d", &La.length); printf("输入第一个有序顺序表中的元素:"); for(int i = 0; i < La.length; i ++) scanf("%d", &La.elem[i]); printf("输入第二个有序顺序表的元素个数:"); scanf("%d", &Lb.length); printf("输入第二个有序顺序表中的元素:"); for(int i = 0; i < Lb.length; i ++) scanf("%d", &Lb.elem[i]); MergeList_Sq(La, Lb, Lc); PrintElem_Sq(Lc); return 0; } bool InitList_Sq(SqList &L) { L.elem =(int*)malloc(LISTINCREMENT*sizeof(int)); if(!L.elem) return false; L.length = 0; L.listsize = LIST_INIT_SIZE; return true; } void PrintElem_Sq(SqList L) { if(L.length == 0) printf("顺序表为空"); else for(int i = 0; i < L.length; i ++) printf("%d ", L.elem[i]); } void MergeList_Sq(SqList La, SqList Lb, SqList &Lc) { int *pa, *pb, *pc; int *pa_last, *pb_last; pa = La.elem; pb = Lb.elem; Lc.listsize = Lc.length = La.length + Lb.length; pc = Lc.elem = (int *)malloc(Lc.listsize * sizeof(int)); if(!Lc.elem)exit(0); pa_last = &La.elem[La.length - 1]; pb_last = &Lb.elem[Lb.length - 1]; 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 ++; }