用C++创建两个线性表,然后,把这两个线性表合并成一个有序线性表,合并后的线性表按照数组元素大小升序排序。 输入 第一行:第一个线性表的元素个数 第二行:输入第一个线性表。 第三行:第二个线性表的元素个数 第四行:输入第二个线性表。
时间: 2024-03-07 07:43:03 浏览: 99
以下是C++创建两个线性表并合并的代码,合并后的线性表按照数组元素大小升序排序:
```cpp
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 100;
// 定义顺序存储结构的线性表
struct SeqList {
int data[MAXN];
int length;
};
// 定义链式存储结构的线性表
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
typedef ListNode* LinkList;
// 顺序存储结构的线性表合并函数
void merge(SeqList L1, SeqList L2, SeqList& L3) {
int i = 0, j = 0, k = 0;
while (i < L1.length && j < L2.length) {
if (L1.data[i] <= L2.data[j]) {
L3.data[k++] = L1.data[i++];
} else {
L3.data[k++] = L2.data[j++];
}
}
while (i < L1.length) {
L3.data[k++] = L1.data[i++];
}
while (j < L2.length) {
L3.data[k++] = L2.data[j++];
}
L3.length = k;
sort(L3.data, L3.data + L3.length); // 排序
}
// 链式存储结构的线性表合并函数
void merge(LinkList L1, LinkList L2, LinkList& L3) {
ListNode* p = L1;
ListNode* q = L2;
ListNode* r = L3;
while (p && q) {
if (p->val <= q->val) {
r->next = p;
p = p->next;
} else {
r->next = q;
q = q->next;
}
r = r->next;
}
r->next = p ? p : q;
while (r->next) {
r = r->next;
}
sortList(L3->next); // 排序
}
// 链式存储结构的线性表排序函数
void sortList(ListNode* head) {
if (!head || !head->next) {
return;
}
ListNode* slow = head;
ListNode* fast = head->next;
while (fast && fast->next) {
slow = slow->next;
fast = fast->next->next;
}
ListNode* mid = slow->next;
slow->next = NULL;
ListNode* left = head;
ListNode* right = mid;
sortList(left);
sortList(right);
ListNode* dummy = new ListNode(0);
ListNode* cur = dummy;
while (left && right) {
if (left->val <= right->val) {
cur->next = left;
left = left->next;
} else {
cur->next = right;
right = right->next;
}
cur = cur->next;
}
cur->next = left ? left : right;
head = dummy->next;
}
int main() {
SeqList L1, L2, L3;
LinkList L4 = new ListNode(0);
int n1, n2;
cin >> n1;
for (int i = 0; i < n1; i++) {
cin >> L1.data[i];
}
L1.length = n1;
cin >> n2;
for (int i = 0; i < n2; i++) {
cin >> L2.data[i];
}
L2.length = n2;
merge(L1, L2, L3);
merge(L4, L1, L2);
cout << "顺序存储结构的线性表合并结果:";
for (int i = 0; i < L3.length; i++) {
cout << L3.data[i] << " ";
}
cout << endl;
cout << "链式存储结构的线性表合并结果:";
ListNode* p = L4->next;
while (p) {
cout << p->val << " ";
p = p->next;
}
cout << endl;
return 0;
}
--相关问题--:
阅读全文