将两个升序的顺序表A和B合并为一个升序表C
有顺序表A和B,其表中的元素均按照由小到大排序,将A和B两个升序的顺序表A和B合并为一个升序表C ,C中的元素也按照由大到小排序
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 1024
typedef struct
{
int data[MAXSIZE];//存储顺序表中的元素
int len;//顺序表长度
}SeqList;//顺序表类型
SeqList *Init_SeqList()//顺序表初始化
{
SeqList *L;
L=(SeqList*)malloc(sizeof(SeqList));
L->len=0;
return L;
}
void CreatList(SeqList **L)//建立顺序表
{
int i,n;
printf("Input length of List:");
scanf("%d",&n);
printf("Input elements of List:\n");
for(i=1;i<=n;i++)
scanf("%d",&(*L)->data[i]);
(*L)->len=n;
}
int Merge(SeqList *A,SeqList *B,SeqList **C)//将两个升序的顺序表A和B合并为一个升序表C
{
int i=1,j=1,k=1;
if(A->len+B->len>=MAXSIZE)
printf("Error !\n");
else
{
*C=(SeqList *)malloc(sizeof(SeqList));
while(i<=A->len&&j<=B->len)
if(A->data[i]<B->data[j])
(*C)->data[k++]=A->data[i++];
else
(*C)->data[k++]=A->data[i++];
while(i<=A->len)//当表A未复制完
(*C)->data[k++]=A->data[i++];
while(j<=B->len)//当表B未复制完
(*C)->data[k++]=B->data[j++];
(*C)->len=k-1;//存储表长
}
}
void print(SeqList *L)//顺序表的输出
{
int i;
for(i=1;i<=L->len;i++)
printf("%2d",L->data[i]);
printf("\n");
}
int main()
{
SeqList *A,*B,*C;
A=Init_SeqList();//顺序表初始化
printf("Creat ListA:\n");
CreatList(&A);//建立顺序表
print(A);//输出顺序表
B=Init_SeqList();
printf("Creat ListB:\n");
CreatList(&B);
print(B);
C=Init_SeqList();
Merge(A,B,&C);//将升序表A和B合并未升序表C
print(C);
}
/*
5
1 2 3 4 5
4
6 7 8 9
*/