用c语言输入两组有序序列,建立两个有序顺序表,将它们合并,且保持有序。
时间: 2023-11-12 16:06:04 浏览: 81
以下是用C语言实现的代码,其中假设输入的两组序列长度相等。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义顺序表的最大长度
// 定义顺序表结构体
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
// 初始化顺序表
void initList(SqList *L) {
L->length = 0;
}
// 向顺序表中插入元素
void insertList(SqList *L, int data) {
if (L->length == MAXSIZE) {
printf("Error: List is full\n");
return;
}
L->data[L->length++] = data;
}
// 合并两个有序顺序表
SqList mergeList(SqList L1, SqList L2) {
SqList L;
initList(&L);
int i = 0, j = 0;
while (i < L1.length && j < L2.length) {
if (L1.data[i] <= L2.data[j]) {
insertList(&L, L1.data[i++]);
} else {
insertList(&L, L2.data[j++]);
}
}
while (i < L1.length) {
insertList(&L, L1.data[i++]);
}
while (j < L2.length) {
insertList(&L, L2.data[j++]);
}
return L;
}
// 打印顺序表
void printList(SqList L) {
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
int main() {
SqList L1, L2, L;
initList(&L1);
initList(&L2);
// 输入两组有序序列
printf("Please input the first sorted sequence:\n");
for (int i = 0; i < MAXSIZE; i++) {
int data;
scanf("%d", &data);
if (data == -1) { // 输入-1表示停止输入
break;
}
insertList(&L1, data);
}
printf("Please input the second sorted sequence:\n");
for (int i = 0; i < MAXSIZE; i++) {
int data;
scanf("%d", &data);
if (data == -1) { // 输入-1表示停止输入
break;
}
insertList(&L2, data);
}
// 合并两个有序顺序表
L = mergeList(L1, L2);
// 打印合并后的有序顺序表
printf("Merged sorted sequence: ");
printList(L);
return 0;
}
```
运行程序,输入两组有序序列,程序将自动合并并打印出合并后的有序序列。
例如,输入以下两组有序序列:
```
Please input the first sorted sequence:
1 3 5 7 9 -1
Please input the second sorted sequence:
2 4 6 8 10 -1
```
程序将输出以下结果:
```
Merged sorted sequence: 1 2 3 4 5 6 7 8 9 10
```
阅读全文