提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
题目叙述
总时间限制:
3000ms
内存限制:
500000kB
描述
巳知线性表LA和线性表LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的元素仍按值非递减有序排列。
输入
三行,第一行A,B集合的个数n,m
第二行:集合A的数据;
第三行:集合B的数据。
输出
二行,第一行,集合C的个数k
第二行:集合C的数据。
样例输入
11 12 2 4 6 7 8 9 12 34 56 78 89 3 5 7 9 12 34 56 98 234 456 789 1234
样例输出
18 2 3 4 5 6 7 8 9 12 34 56 78 89 98 234 456 789 1234
提示
n,m<255
提示:以下是本篇文章正文内容,下面案例可供参考
代码
#include <iostream>
#include <cstdlib>
using namespace std;
//cout<<l.head2是显示l.head2的地址
//cout<<l.head2->data是显示head2->data的值
//cout<<l.head2->next是显示head2->next的地址
class Node {//节点定义
public:
int data;//数据域
class Node* next;//指针域
};
class LinkList {
public:
LinkList() {//初始化
head2 = new Node;//new(新建)一个头节点
head2->data = 0;//因为定义head时用的是Node自定义类型,
//因此有数据域,有指针域,data先定义为0,后面插入数据时更改,next同理
head2->next = nullptr;
}
~LinkList() {//析构
delete head2;
}
int GetlenForweicha();
void weichaList();
void CreatFLink();
void DisfloatLink();
private:
Node* head2;
Node* temp;
};
int LinkList::GetlenForweicha() {
int size = 0;
Node* p = head2->next;//定义一个新指针,指向头节点的next
//(next是第一个,头节点不算)
//*p =的是next的值,head是=&next,(head->next==Node.next)
while (p != nullptr) {
size++;
p = p->next;
}
return size;
}
void LinkList::weichaList() {//3.尾插法,独立于此函数
int data1 = 1;
while (data1 != 0) {
cin >> data1;
if (data1 != 0) {
Node* newNode = new Node;//先定义一个Node节点指针newNode
newNode->next = nullptr;//定义newNode的数据域和指针域
newNode->data = data1;
Node* p = head2;
if (head2 == nullptr) {
head2 = newNode;
}
while (p->next != nullptr)
{
p = p->next;//次循环结束后,p即为插入前的最后一个节点
}
p->next = newNode;
}
}
}
void LinkList::CreatFLink() {//有序函数
int l = GetlenForweicha();
for (int i = 1; i <= l; i++) {
Node* h = head2;
Node* pt = h->next;
Node* pt2 = pt->next;
for (int j = 1; j <= l - i; j++) {
if (j != 1) {
Node* h = head2;
Node* pt = h->next;
Node* pt2 = pt->next;
for (int k = 1; k <= j; k++) {
pt = pt->next;
pt2 = pt2->next;
}
}
if (pt->data > pt2->data) {
int t = pt2->data;
pt2->data = pt->data;
pt->data = t;
}
if (pt->next != nullptr) {
pt = pt->next;
pt2 = pt2->next;
}
}
}
Node* p1 = head2;
do {
p1 = p1->next;
cout << p1->data << " ";
} while (p1->next != nullptr);
cout << endl;
}
void LinkList::DisfloatLink() {//逆序函数
Node* p = head2;
Node* q, * front = nullptr;
while (p != nullptr) {
q = p->next;
p->next = front;
front = p;
p = q;
}
Node* p1 = front;
cout << p1->data << " ";
do {
p1 = p1->next;
cout << p1->data << " ";
} while (p1->next->next != nullptr);
cout << endl;
}
int main() {
LinkList l;
int i;
l.weichaList();
l.CreatFLink();
l.DisfloatLink();
return 0;
}