链式有序表的合并c语言
时间: 2023-05-25 09:03:30 浏览: 125
链式有序表合并可以采用归并排序的思想。首先,需要将两个有序表顺序合并成一个有序表,然后再将这个有序表与第三个有序表合并,以此类推,直到最后只剩一个有序表为止。
下面是链式有序表合并的C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链式结构体
typedef struct node
{
int data; // 存储的数据
struct node* next; // 下一个节点
} Node;
// 创建一个有n个节点的有序链表
Node* create(int n)
{
Node* head = NULL;
Node* tmp = NULL;
// 逐个添加元素
for (int i = 0; i < n; i++)
{
Node* p = (Node*)malloc(sizeof(Node));
printf("请输入第%d个节点的值:", i + 1);
scanf("%d", &(p->data));
p->next = NULL;
if (head == NULL)
{
head = p;
tmp = p;
}
else if (p->data < head->data)
{
p->next = head;
head = p;
}
else
{
Node* q = head;
while (q != NULL && p->data > q->data)
{
tmp = q;
q = q->next;
}
if (q == NULL)
tmp->next = p;
else
{
p->next = q;
tmp->next = p;
}
}
}
return head;
}
// 合并两个有序链表
Node* merge(Node* head1, Node* head2)
{
Node* new_head = NULL;
while (head1 != NULL && head2 != NULL)
{
if (head1->data < head2->data)
{
if (new_head == NULL)
new_head = head1;
else
{
Node* p = new_head;
while (p->next != NULL)
p = p->next;
p->next = head1;
}
head1 = head1->next;
}
else
{
if (new_head == NULL)
new_head = head2;
else
{
Node* p = new_head;
while (p->next != NULL)
p = p->next;
p->next = head2;
}
head2 = head2->next;
}
}
while (head1 != NULL)
{
Node* p = new_head;
while (p->next != NULL)
p = p->next;
p->next = head1;
head1 = head1->next;
}
while (head2 != NULL)
{
Node* p = new_head;
while (p->next != NULL)
p = p->next;
p->next = head2;
head2 = head2->next;
}
return new_head;
}
// 打印链表元素
void print(Node* head)
{
Node* p = head;
while (p != NULL)
{
printf("%d", p->data);
p = p->next;
if (p != NULL)
printf("->");
}
printf("\n");
}
int main()
{
int n1, n2;
printf("请输入第一个有序链表的节点个数:");
scanf("%d", &n1);
Node* head1 = create(n1);
printf("请输入第二个有序链表的节点个数:");
scanf("%d", &n2);
Node* head2 = create(n2);
Node* new_head = merge(head1, head2);
printf("合并后的链表:\n");
print(new_head);
return 0;
}
```
在这段代码中,使用了 `create` 函数创建一个有序链表,并按照元素的大小顺序进行插入,然后使用 `merge` 函数将两个有序链表合并为一个有序链表,最后使用 `print` 函数将合并后的链表打印出来。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)