用C语言编程,定义两个顺序表LA,LB,编写算法,将他们合并成一个顺序表LC,给出完整代码
时间: 2024-09-26 20:15:19 浏览: 63
C语言 使用自定义顺序表实现非递减顺序表合并
在C语言中,我们可以使用结构体和指针来定义顺序表,并通过循环遍历和拼接的方式来合并两个顺序表。下面是一个简单的示例,假设我们的顺序表元素都是整型,并且顺序表节点包含了一个整数值和指向下一个节点的指针:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 合并两个有序列表函数
Node* mergeLists(Node* LA, Node* LB) {
if (LA == NULL) return LB; // 如果LA为空,直接返回LB
if (LB == NULL) return LA; // 如果LB为空,直接返回LA
// 比较两个列表头部元素,选择较小的一个添加到结果列表
if (LA->data <= LB->data) {
Node* LC = LA;
LA = LA->next; // 移动LA指针
} else {
Node* LC = LB;
LB = LB->next;
}
// 将剩余部分逐个添加至结果列表
while (LA != NULL && LB != NULL) {
if (LA->data <= LB->data) {
LC->next = LA;
LA = LA->next;
} else {
LC->next = LB;
LB = LB->next;
}
LC = LC->next;
}
// 添加剩余的未遍历部分(如果有的话)
if (LA != NULL) {
LC->next = LA;
} else {
LC->next = LB;
}
return LC;
}
// 测试函数
int main() {
Node* LA = malloc(sizeof(Node));
LA->data = 1;
LA->next = malloc(sizeof(Node));
LA->next->data = 3;
LA->next->next = NULL;
Node* LB = malloc(sizeof(Node));
LB->data = 2;
LB->next = malloc(sizeof(Node));
LB->next->data = 4;
LB->next->next = NULL;
Node* LC = mergeLists(LA, LB);
// 打印合并后的列表
Node* temp = LC;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
free(temp); // 释放临时内存
free(LC);
return 0;
}
```
这段代码首先创建了两个顺序表LA和LB作为示例,然后合并它们并将结果保存在LC中。运行main函数会打印出合并后的顺序表。
阅读全文