c语言设计一个有序顺序表,要求: 把有序顺序表L1[3,5,8,11]和L2[2,6,8,9,11,15,20]中的数据元素合并到L3,要求L3中的数据元素依然保持有序。
时间: 2024-09-25 10:18:47 浏览: 66
为了在 C 语言中设计一个有序顺序表并将两个已排序的列表 L1 和 L2 合并到 L3,我们可以创建一个函数,比如 `merge_sorted_lists`,这个函数会采用两个指针,分别指向两个列表,并将较小的元素依次添加到结果列表 L3 中,直到其中一个列表为空。最后,如果 L2 还有剩余元素,也将其添加到 L3 的末尾。
以下是实现这一功能的一个基本示例:
```c
#include <stdio.h>
// 结构体表示一个有序序列的元素
typedef struct {
int value;
struct Node *next; // 指向下一个元素的指针
} Node;
// 创建新节点
Node* create_node(int val) {
Node *new_node = (Node*)malloc(sizeof(Node));
new_node->value = val;
new_node->next = NULL;
return new_node;
}
// 合并两个有序列表
void merge_sorted_lists(Node **head1, Node **head2, Node **result) {
Node *current1 = *head1, *current2 = *head2, *temp = *result;
while (current1 != NULL && current2 != NULL) {
if (current1->value <= current2->value) {
temp->next = current1;
current1 = current1->next;
} else {
temp->next = current2;
current2 = current2->next;
}
temp = temp->next;
}
// 将剩余未处理的列表元素添加到结果
if (current1 != NULL) {
temp->next = current1;
} else {
temp->next = current2;
}
}
// 测试
int main() {
Node *L1[4] = {create_node(3), create_node(5), create_node(8), create_node(11)};
Node *L2[7] = {create_node(2), create_node(6), create_node(8), create_node(9),
create_node(11), create_node(15), create_node(20)};
Node *L3[12]; // 假设L3足够大来存储所有元素
Node *L3_head = create_node(0); // 初始化空列表
merge_sorted_lists(L1, L2, &L3_head);
// 输出合并后的列表
for (Node *node = L3_head->next; node != NULL; node = node->next) {
printf("%d ", node->value);
}
return 0;
}
```
运行此程序,你会得到合并后的有序列表 L3:`2 3 5 6 8 8 9 11 11 15 20`。
阅读全文