已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列。例如,设LA=(3,5,8,11) LB=(2,6,8,9,11,15,20)则LC=(2,3,5,6,8,9,11,11,15,20)
c=a 当a<=b时,
c=b 当a>b时。
已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列。例如,设LA=(3,5,8,11) LB=(2,6,8,9,11,15,20)则LC=(2,3,5,6,8,9,11,11,15,20)
c=a 当a<=b时,
c=b 当a>b时。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef struct
{
int *elem;
int length;
int listsize;
}SqList;
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(OVERFLOW);
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++;
}
void InitList_Sq(SqList *L)
{
L->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L->elem)
printf("Memory allocate failure!!");
L->length=0;
L->listsize=LIST_INIT_SIZE;
}
void InputElem_Sq(SqList *L)
{
int x;
int i;
i=0;
scanf("%d",&x);
while(x!=0)//
{
L->elem[i]=x;
i++;
scanf("%d",&x);
}
L->length=i;
}
void PrintList_Sq(SqList *L)
{
int i;
i=0;
while(i<L->length)
{
printf("%5d",L->elem[i]);
i++;
}
printf("\n");
}
void main()
{
int i,j;
SqList q,p,r;
printf("Please input List LA (0 is end)!\n");
InitList_Sq (&p);
InputElem_Sq(&p);
printf("Please input List LB (0 is end)!\n");
InitList_Sq (&q);
InputElem_Sq(&q);
MergeList_Sq(q,p,&r);
printf("Output the mergList LC!\n");
PrintList_Sq(&r);
}