2022级软件工程专业《数据结构与算法A》实验1:按数据元素升序建立单链表

题目如下:

Description

对输入的正整数序列建立有序单链表。在建立单链表的过程中,链表中的数据元素按升序排列。当输入的数据元素在单链表中已经存在时,不进行插入操作。

请使用面向对象形式定义结点类和链表类,参考代码如下。

class Node

{

    int data;

    Node* next;

    ...

    friend class LinkList; //声明友元类,以便在LinkList类中可以访问Node类的私有成员。

};

class LinkList

{

    Node* head;

    int size;

public:

   ....

};

Input

每行一个正整数,当输入-1时结束。

Output

将建立好的升序单链表所有元素按从小到大的顺序依次输出。

Sample Input

100
50
200
150
75
10
300
200
100
400
-1

Sample Output

10
50
75
100
150
200
300
400

解答如下:

#include <iostream>

using namespace std;

class Node //声明节点类

{

    int data;

    Node* next;

    friend class LinkList; //声明友元类,以便在LinkList类中可以访问Node类的私有成员。

public:

    Node(int num) : data(num), next(NULL) {}; //构造函数

};

class LinkList //声明链表类

{

    Node* head;

    int size;

public:

    LinkList() : head(NULL), size(0) {};

    void insert(int num)

    {

        Node* p = new Node(num);

        if (!head || p->data < head->data)

        {

            p->next = head;

            head = p;

            

        }

        else

        {

            Node* index = head;

            while (index->next != NULL && p->data > index->next->data)

            {

                index = index->next;

            }

            if (index->next == NULL || p->data != index->next->data)

            {

                p->next = index->next;

                index->next = p;

                

            }

        }

    }

    void print()

    {

        Node* index = head;

        while (index != NULL)

        {

            cout << index->data << endl;

            index = index->next;

        }

    }

};

int main()

{

    LinkList l;

    int num;

    cin >> num;

    while (num != -1)

    {

        l.insert(num);

        cin >> num;

    }

    l.print();

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值