C语言合并两个线性表用顺序表书写代码
时间: 2024-10-17 10:03:19 浏览: 7
在C语言中,合并两个线性表通常指的是将两个已排序的顺序表连接在一起形成一个新的有序表。这里假设你有两个指针分别指向两个有序表的头部。以下是基本的步骤和示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 合并两个有序链表函数
Node* mergeSortedLists(Node* list1, Node* list2) {
if (!list1) return list2; // 如果list1为空,直接返回list2
if (!list2) return list1; // 如果list2为空,直接返回list1
// 比较两个链表当前元素,选择较小的一个添加到新链表
if (list1->data <= list2->data) {
list1->next = mergeSortedLists(list1->next, list2); // 递归处理剩余部分
return list1;
} else {
list2->next = mergeSortedLists(list1, list2->next);
return list2;
}
}
// 创建新的顺序表节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
return newNode;
}
int main() {
// 创建两个示例有序表
Node* list1 = createNode(1);
list1->next = createNode(3);
list1->next->next = createNode(5);
Node* list2 = createNode(2);
list2->next = createNode(4);
list2->next->next = createNode(6);
// 合并两个链表
Node* mergedList = mergeSortedLists(list1, list2);
// 打印合并后的链表
while (mergedList != NULL) {
printf("%d -> ", mergedList->data);
mergedList = mergedList->next;
}
// 清理内存
free(list1);
free(list2);
free(mergedList);
return 0;
}
```
在这个例子中,`mergeSortedLists` 函数会创建一个新的有序列表,其中包含来自 `list1` 和 `list2` 的所有元素,并保持它们的升序排列。
阅读全文