将两个有序顺序表合并为一个新的有序顺序表,输出合并后的顺序表的所有数据元素;
#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 ++;
}