将两个线性表合并的C语言完整代码
时间: 2023-09-02 15:07:36 浏览: 196
以下是将两个线性表合并的C语言完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 定义线性表最大长度
typedef struct {
int data[MAX_SIZE]; // 存储数据元素
int length; // 线性表当前长度
} List;
void initList(List *l) {
l->length = 0; // 初始化线性表长度为0
}
void insertList(List *l, int index, int value) {
if (index < 1 || index > l->length + 1) { // 判断插入位置是否合法
printf("插入位置不合法!\n");
return;
}
if (l->length == MAX_SIZE) { // 判断线性表是否已满
printf("线性表已满,无法插入!\n");
return;
}
for (int i = l->length; i >= index; i--) { // 从后向前依次将元素后移
l->data[i] = l->data[i - 1];
}
l->data[index - 1] = value; // 将新元素插入到指定位置
l->length++; // 线性表长度加1
}
void mergeList(List *l1, List *l2, List *l3) {
int i = 0, j = 0, k = 0;
while (i < l1->length && j < l2->length) { // 依次比较两个线性表中的元素
if (l1->data[i] <= l2->data[j]) {
l3->data[k] = l1->data[i];
i++;
k++;
} else {
l3->data[k] = l2->data[j];
j++;
k++;
}
}
while (i < l1->length) { // 将剩余元素插入到合并后的线性表中
l3->data[k] = l1->data[i];
i++;
k++;
}
while (j < l2->length) { // 将剩余元素插入到合并后的线性表中
l3->data[k] = l2->data[j];
j++;
k++;
}
l3->length = k; // 设置合并后的线性表长度
}
int main() {
List l1, l2, l3;
initList(&l1);
initList(&l2);
initList(&l3);
insertList(&l1, 1, 1);
insertList(&l1, 2, 3);
insertList(&l1, 3, 5);
insertList(&l2, 1, 2);
insertList(&l2, 2, 4);
insertList(&l2, 3, 6);
mergeList(&l1, &l2, &l3);
printf("合并后的线性表:\n");
for (int i = 0; i < l3.length; i++) { // 遍历输出合并后的线性表
printf("%d ", l3.data[i]);
}
printf("\n");
return 0;
}
```
在这个例子中,我们定义了一个 `List` 结构体表示线性表,其中 `data` 数组存储数据元素,`length` 表示当前线性表长度。我们定义了 `initList` 函数用于初始化线性表,`insertList` 函数用于插入元素,`mergeList` 函数用于合并两个线性表。在 `main` 函数中,我们创建两个线性表 `l1` 和 `l2`,并将它们合并到 `l3` 中,最后输出合并后的线性表。
阅读全文