#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
/*
* 将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表
*/
#define MAX 5
typedef struct {
int data[MAX];
int length;
}SqList;
typedef struct {
int data[10];
int length;
}SqListL3;
//初始化顺序表L1,L2
void InitList(SqList& L)
{
for (int i = 0; i < MAX; i++)
{
L.data[i] = 0;
}
L.length = 0;
}
void InitListL3(SqListL3& L3)
{
for (int i = 0; i < 10; i++)
{
L3.data[i] = 0;
}
L3.length = 0;
}
//给顺序表1中赋值
void PutNum1(SqList& L) // 1 1 2 3 4
{
for (int i = 0; i < MAX; i++)
{
scanf("%d", &L.data[i]);
L.length++;
}
}
//给顺序表2中赋值
void PutNum2(SqList& L) // 2 3 4 5 6
{
for (int i = 0; i < MAX; i++)
{
scanf("%d", &L.data[i]);
L.length++;
}
}
//合并顺序表
bool Merge(SqList& L1, SqList& L2, SqListL3& L3)
{
int i = 0;
int j = 0;
int k = 0;
while (i < L1.length && j < L2.length)
{
if (L1.data[i] <= L2.data[j])
{
L3.data[k++] = L1.data[i++];
}
else
{
L3.data[k++] = L2.data[j++];
}
}
while (i<L1.length)
{
L3.data[k++] = L1.data[i++];
}
while (j < L2.length)
{
L3.data[k++] = L2.data[j++];
}
for (int i = 0; i < 10; i++)
{
printf("%2d", L3.data[i]);
}
return true;
}
int main()
{
SqList L1,L2;
SqListL3 L3;
InitList(L1);
InitList(L2);
InitListL3(L3);
PutNum1(L1);
PutNum2(L2);
Merge(L1,L2,L3);
return 0;
}