非递减有序集合合并

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


题目叙述

总时间限制: 

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值