2 、分别创建两个有序的顺序表(每个表的元素个数及每个元素的值在运行时由键盘输入),现将两个有序表合并,并保证新表依然为有序的顺序表。
//main.c
//分别创建两个有序的顺序表(每个表的元素个数及每个元素的值在运行时由键盘输入),
// 现将两个有序表合并,并保证新表依然为有序的顺序表。
#include<stdio.h>
#include<stdlib.h>
int i = 0, j = 0, z = 0;
typedef struct {
int* elem;
int length;
}Sqlist;
Sqlist Compare(Sqlist L1, Sqlist L2)
{
Sqlist L3;
L3.length = 0;
L3.elem = (int*)malloc(sizeof(int) * 1000);
int i = 0, j = 0;
while (i < L1.length && j < L2.length) // 合并两个表
{
if (L1.elem[i] <= L2.elem[j])
{
L3.elem[L3.length++] = L1.elem[i++];
}
else
{
L3.elem[L3.length++] = L2.elem[j++];
}
}
// 将剩余元素添加到新表
while (i < L1.length)
{
L3.elem[L3.length++] = L1.elem[i++];
}
while (j < L2.length)
{
L3.elem[L3.length++] = L2.elem[j++];
}
return L3;
}
int main()
{
Sqlist L1, L2, L3;
L1.elem = (int*)malloc(sizeof(int) * 1000);
L2.elem = (int*)malloc(sizeof(int) * 1000);
L3.elem = (int*)malloc(sizeof(int) * 1000);
printf("请输入顺序表1的元素个数(如:4):");
scanf_s("%d", &L1.length);
printf("请输入顺序表1的元素(如:1 2 6 8):");
for (int x = 0; x < L1.length; x++)
{
scanf_s("%d", &L1.elem[x]);
}
printf("请输入顺序表2的元素个数(如:4):");
scanf_s("%d", &L2.length);
printf("请输入顺序表2的元素(如:1 2 6 8):");
for (int x = 0; x < L2.length; x++)
{
scanf_s("%d", &L2.elem[x]);
}
L3 = Compare(L1, L2);
printf("下面是两个顺序表合并之后:\n");
for (int x = 0; x < L3.length; x++)
{
printf("%d ", L3.elem[x]);
}
}