用c加加写一个算法合并两个已排序的线性表(分别写一个顺序表和链表)
时间: 2024-10-19 19:17:44 浏览: 32
当然可以。这里我会分别演示如何使用C++(不是C+++,因为C++本身就有强大的数据结构支持)编写算法合并两个已排序的线性表,即有序数组和有序链表。
**1. 合并两个有序数组 (顺序表)**
```cpp
#include <iostream>
// 数组类型的合并函数
void mergeArrays(int arr1[], int size1, int arr2[], int size2) {
int i = 0, j = 0, k = 0;
while (i < size1 && j < size2) {
if (arr1[i] <= arr2[j]) {
std::cout << arr1[i++] << " ";
} else {
std::cout << arr2[j++] << " ";
}
}
// 将剩余元素添加到结果
while (i < size1) {
std::cout << arr1[i++] << " ";
}
while (j < size2) {
std::cout << arr2[j++] << " ";
}
}
int main() {
int array1[] = {1, 3, 5, 7};
int array2[] = {2, 4, 6, 8};
int sizes[2] = {sizeof(array1)/sizeof(array1[0]), sizeof(array2)/sizeof(array2[0])};
mergeArrays(array1, sizes[0], array2, sizes[1]);
return 0;
}
```
**2. 合并两个有序链表 (链表)**
```cpp
#include <iostream>
using namespace std;
struct Node {
int data;
Node* next;
};
// 链表节点的合并函数
Node* mergeSortedLists(Node* head1, Node* head2) {
if (!head1) return head2;
if (!head2) return head1;
if (head1->data <= head2->data) {
head1->next = mergeSortedLists(head1->next, head2);
return head1;
} else {
head2->next = mergeSortedLists(head1, head2->next);
return head2;
}
}
// 打印链表
void printList(Node* node) {
while (node != nullptr) {
cout << node->data << " -> ";
node = node->next;
}
cout << "nullptr" << endl;
}
int main() {
// 创建两个示例链表
Node* list1 = createLinkedList({1, 3, 5});
Node* list2 = createLinkedList({2, 4, 6});
// 合并链表
list1 = mergeSortedLists(list1, list2);
// 打印合并后的链表
printList(list1);
return 0;
}
```
在这个例子中,`createLinkedList()`用于创建包含给定整数的链表。注意,这两个示例都是简化的版本,实际应用中你需要处理边界条件,例如链表为空的情况。
阅读全文