使用c语言完成动态创建2个有序的顺序表:La, Lb;再创建一个空的顺序表Lc;然后将La与Lb的内容合并到Lc中,使得Lc也是有序的,并输出Lc中的内容
时间: 2023-11-22 14:53:14 浏览: 89
以下是使用C语言完成动态创建2个有序的顺序表La和Lb,并将它们合并到Lc中的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int *elem; // 存储空间基址
int length; // 当前长度
int size; // 分配的存储容量
} SqList;
// 初始化顺序表
void InitList(SqList *L, int size) {
L->elem = (int*)malloc(sizeof(int) * size);
L->length = 0;
L->size = size;
}
// 向顺序表中插入元素
int ListInsert(SqList *L, int e) {
if (L->length >= L->size) {
return 0; // 表满,插入失败
}
int i = L->length - 1;
while (i >= 0 && L->elem[i] > e) {
L->elem[i+1] = L->elem[i];
i--;
}
L->elem[i+1] = e;
L->length++;
return 1; // 插入成功
}
// 合并两个有序顺序表
void MergeList(SqList *La, SqList *Lb, SqList *Lc) {
int i = 0, j = 0, k = 0;
while (i < La->length && j < Lb->length) {
if (La->elem[i] <= Lb->elem[j]) {
Lc->elem[k++] = La->elem[i++];
} else {
Lc->elem[k++] = Lb->elem[j++];
}
}
while (i < La->length) {
Lc->elem[k++] = La->elem[i++];
}
while (j < Lb->length) {
Lc->elem[k++] = Lb->elem[j++];
}
Lc->length = k;
}
// 输出顺序表中的元素
void PrintList(SqList *L) {
for (int i = 0; i < L->length; i++) {
printf("%d ", L->elem[i]);
}
printf("\n");
}
int main() {
SqList La, Lb, Lc;
InitList(&La, MAXSIZE);
InitList(&Lb, MAXSIZE);
InitList(&Lc, MAXSIZE*2);
int m, n, e;
printf("请输入La的长度:");
scanf("%d", &m);
printf("请按照从小到大的顺序输入La中的元素:");
for (int i = 0; i < m; i++) {
scanf("%d", &e);
ListInsert(&La, e);
}
printf("请输入Lb的长度:");
scanf("%d", &n);
printf("请按照从小到大的顺序输入Lb中的元素:");
for (int i = 0; i < n; i++) {
scanf("%d", &e);
ListInsert(&Lb, e);
}
MergeList(&La, &Lb, &Lc);
printf("合并后的顺序表Lc中的元素为:");
PrintList(&Lc);
return 0;
}
```
在上面的代码中,我们使用了结构体来表示顺序表,其中包含了指向存储空间基址的指针、当前长度和分配的存储容量三个成员变量。我们通过动态内存分配来为顺序表分配存储空间,并通过InitList函数进行初始化。
通过ListInsert函数,我们可以向顺序表中插入元素,这里使用了插入排序的思想。
在MergeList函数中,我们使用了类似于归并排序的思想,将La和Lb中的元素依次比较,放入Lc中,最终得到的Lc也是有序的。
最后,我们通过PrintList函数输出顺序表中的元素。
阅读全文