能否提供一个C语言中实现顺序表合并的具体代码示例?
时间: 2024-10-25 17:11:20 浏览: 6
pta题库答案c语言之线性结构1两个有序链表序列的合并.zip
当然可以,这里是C语言中实现两个顺序表合并的一个简单示例。这里我们假设你有两个顺序表,每个元素都是整数,并且列表的头部是指针。我们将创建一个新的空顺序表并逐个添加这两个列表的元素。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 合并两个有序链表
Node* mergeLists(Node* list1, Node* list2) {
// 新建一个指向新链表头的指针
Node* result = (list1 == NULL) ? list2 : list1;
// 遍历两个链表
while (list1 != NULL && list2 != NULL) {
// 如果第一个链表的元素小于第二个,将其添加到结果
if (list1->data <= list2->data) {
result->next = list1;
list1 = list1->next;
} else {
result->next = list2;
list2 = list2->next;
}
// 更新结果指针
result = result->next;
}
// 将剩余链表(如果有的话)连接到结果后面
if (list1 != NULL) {
result->next = list1;
} else if (list2 != NULL) {
result->next = list2;
}
return result;
}
int main() {
// 创建示例链表
Node* list1 = (Node*)malloc(sizeof(Node));
list1->data = 1;
list1->next = (Node*)malloc(sizeof(Node));
list1->next->data = 3;
list1->next->next = NULL;
Node* list2 = (Node*)malloc(sizeof(Node));
list2->data = 2;
list2->next = (Node*)malloc(sizeof(Node));
list2->next->data = 4;
list2->next->next = NULL;
// 合并两个链表
Node* mergedList = mergeLists(list1, list2);
// 打印合并后的链表
Node* current = mergedList;
while (current != NULL) {
printf("%d -> ", current->data);
current = current->next;
}
printf("NULL\n");
free(mergedList); // 别忘了释放内存
return 0;
}
```
运行这个程序,你会看到合并后的有序链表:1 -> 2 -> 3 -> 4 -> NULL
阅读全文