建立两个非递减有序线性表A和B(两个顺序表中至少含有3个数据元素),编写算法实现两个顺序表的合并操作,形成新的线性表C,要求线性表C也是非递减有序排列。c语言实现
时间: 2024-09-23 11:05:13 浏览: 44
一算法可实现两个非递减的线性表的合并,采用链式存储结构,能够输出合并前和合并后链表的内容
在C语言中,我们可以采用迭代的方式来合并两个非递减有序的线性表A和B,创建一个新的线性表C。这里是一个简单的示例代码:
```c
#include <stdio.h>
// 结构体表示链表节点
typedef struct Node {
int data;
struct Node* next;
} Node;
// 合并函数
Node* mergeSortedLists(Node* A, Node* B) {
// 创建新列表C的头结点
Node* C = (A == NULL) ? B : (B == NULL) ? A : (A->data <= B->data) ? A : B;
// 遍历较小的链表,不断更新C的指向
while ((A != NULL && B != NULL) && (A->data <= B->data)) {
if (A->data <= B->data) {
C->next = A;
A = A->next;
} else {
C->next = B;
B = B->next;
}
C = C->next;
}
// 如果其中一个链表还有剩余未处理,将其添加到C的尾部
if (A != NULL) {
C->next = A;
} else {
C->next = B;
}
return C;
}
// 打印链表
void printList(Node* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
int main() {
// 初始化两个已排序的链表 A 和 B
// 这里仅作演示,实际应用需要你自己提供已经排序好的链表指针
Node* A = createSortedList(); // 假设createSortedList()返回已排序的A链表头结点
Node* B = createSortedList(); // 假设createSortedList()返回已排序的B链表头结点
Node* C = mergeSortedLists(A, B);
printf("Sorted List C: ");
printList(C);
return 0;
}
```
在这个代码中,`mergeSortedLists` 函数通过比较两个链表的当前节点值来合并它们,并保持结果的非递减有序。主函数中创建了两个已排序的链表A和B,并将它们合并成C。
阅读全文