#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef int ElemType;
typedef struct Node
{
ElemType elem [MAXSIZE];
int last;
}*SeqList;
SeqList Init_SeqList()
{
SeqList L;
L = (SeqList)malloc(sizeof(Node));
L->last = 0;
return L;
}
void Create(SeqList L)
{
int N;
printf("请输入线性表元素个数:");
scanf("%d", &N);
printf("请输入%d个线性表元素(以空格分隔):\n", N);
for(int i = 0; i < N; i++)
{
scanf("%d", &L->elem[i]);
L->last++;
}
}
void mergeList(SeqList LA,SeqList LB,SeqList LC)
{
int i=0, j=0, k=0;
while(i < LA->last && j < LB->last)
{
//将两者中较小的先放入LC
if(LA->elem[i] <= LB->elem[j])
{
LC->elem[k++] = LA->elem[i++];
}
else
{
LC->elem[k++]=LB->elem[j++];
}
}
//若LA仍然有元素,则直接复制到LC
while(i < LA->last)
{
LC->elem[k++]=LA->elem[i++];
}
//若LB仍然有元素,则直接复制到LC
while(j < LB->last)
{
LC->elem[k++] = LB->elem[j++];
}
//LC的元素个数为二者之和
LC->last = LA->last + LB->last;
}
void PrintL(SeqList L)
{
int i;
printf("线性表的元素个数为%d\n", L->last);
for(i = 0;i < L->last; i++)
{
printf("%d ", L->elem[i]);
}
printf("\n");
}
int main()
{
SeqList LA,LB,LC;
//线性表初始化
LA = Init_SeqList();
LB = Init_SeqList();
LC = Init_SeqList();
//线性表创建及输出
Create(LA);
printf("LA的顺序表序列为:\n");
PrintL(LA);
Create(LB);
printf("LB的顺序表序列为:\n");
PrintL(LB);
//线性表LA和LB合并,保存到LC
mergeList(LA,LB,LC);
printf("合并以后的顺序表LC为:\n");
PrintL(LC);
return 0;
}
两个线性表合并
最新推荐文章于 2021-05-22 20:14:08 发布