C语言实现合并两个有序(从小到大)顺序表为一个顺序表
时间: 2024-12-14 19:16:08 浏览: 37
C语言:定义一个包含学生信息(学号,姓名,成绩)的顺序表和链表.zip
5星 · 资源好评率100%
在C语言中,我们可以使用迭代的方式实现合并两个有序的顺序表(也称为数组)。以下是基本的步骤:
```c
#include <stdio.h>
// 结构体表示单链表节点
typedef struct Node {
int data;
struct Node* next;
} Node;
// 合并两个有序链表函数
Node* mergeSortedLists(Node* list1, Node* list2) {
// 定义临时头结点和空链表
Node* head = NULL;
Node* tail = NULL;
// 判断哪个链表是空的,作为新的起始点
if (list1 == NULL) return list2;
else if (list2 == NULL) return list1;
// 初始化指针
if (list1->data <= list2->data) {
head = list1;
tail = list1;
} else {
head = list2;
tail = list2;
}
// 比较并合并链表
while (list1 != NULL && list2 != NULL) {
if (list1->data <= list2->data) {
tail->next = list1;
tail = list1;
list1 = list1->next;
} else {
tail->next = list2;
tail = list2;
list2 = list2->next;
}
}
// 如果其中一个链表还有剩余元素,将其追加到结果链表末尾
if (list1 != NULL) tail->next = list1; // 如果list1有剩余
else tail->next = list2; // 如果list2有剩余
return head;
}
// 测试函数
void printList(Node* list) {
while (list != NULL) {
printf("%d ", list->data);
list = list->next;
}
printf("\n");
}
int main() {
// 实现两个示例链表
Node* list1 = malloc(sizeof(Node));
list1->data = 1;
list1->next = NULL;
Node* list2 = malloc(sizeof(Node));
list2->data = 3;
list2->next = malloc(sizeof(Node));
list2->next->data = 5;
list2->next->next = NULL;
Node* mergedList = mergeSortedLists(list1, list2);
printList(mergedList); // 输出: 1 3 5
return 0;
}
```
这段代码首先定义了一个链表节点结构,然后实现了一个`mergeSortedLists`函数来合并两个已排序链表。最后在`main`函数中创建了两个例子链表,并打印出合并后的结果。
阅读全文