顺序表的合并完整代码c语言
时间: 2024-10-16 08:12:20 浏览: 51
在C语言中,我们可以使用循环或指针来合并两个已排序的顺序表(数组)。这里是一个简单的示例,假设我们有两个整数数组`list1`和`list2`,我们需要将它们合并到一个新的数组`mergedList`中:
```c
#include <stdio.h>
// 定义顺序表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 合并两个有序链表
Node* mergeLists(Node* list1, Node* list2) {
// 初始化结果链表头结点
Node* mergedHead = NULL;
Node* tail = NULL;
// 比较并合并列表
while (list1 != NULL && list2 != NULL) {
if (list1->data <= list2->data) {
// 如果list1的数据较小,添加到结果链表
if (mergedHead == NULL) {
mergedHead = list1;
tail = list1;
} else {
tail->next = list1;
tail = list1;
}
list1 = list1->next;
} else {
// 如果list2的数据较小,添加到结果链表
if (mergedHead == NULL) {
mergedHead = list2;
tail = list2;
} else {
tail->next = list2;
tail = list2;
}
list2 = list2->next;
}
}
// 添加剩余列表(如果存在)
if (list1 != NULL) {
tail->next = list1; // 如果list1还有元素
} else {
tail->next = list2; // 如果list2还有元素
}
return mergedHead;
}
// 测试函数
int main() {
// 假设你已经有了两个已经排好序的数组list1[]和list2[]
int list1[] = {1, 3, 5};
int list1_size = sizeof(list1) / sizeof(list1[0]);
int list2[] = {2, 4, 6};
int list2_size = sizeof(list2) / sizeof(list2[0]);
Node* head1 = createArrayAsLinkedList(list1, list1_size);
Node* head2 = createArrayAsLinkedList(list2, list2_size); // 创建链表版本
Node* merged = mergeLists(head1, head2);
// 打印合并后的链表
printLinkedList(merged);
return 0;
}
// 其他辅助函数,如创建链表和打印链表,可以按需编写
```
这个例子中,`createArrayAsLinkedList` 和 `printLinkedList` 分别用于将数组转换成链表和打印链表,你需要自行实现。记住,在实际项目中,你可能会有更复杂的情况,比如链表的节点结构、输入数据的动态变化等。
阅读全文