【问题标题】:Sort singly linked list on when inserting into istream c++插入istream c ++时对单链表进行排序
【发布时间】:2011-08-13 20:43:09
【问题描述】:

当谈到 c++ 时,我是世界上最基本的人,我想知道你们是否可以帮助我,如果这样可以。我试图对读入 istream 的节点进行排序,但因为它们被读入。网络上的代码非常复杂,我想知道是否有一种非常基本的方法来实现这一点。

这是我的读取方法,目前它已读入 istream,这很棒,但现在我需要对其进行排序,因为它已读入。我的头疼哈哈

void ListClass::Read(istream& r)
{
    char c[13];
    r >> c;
    r >> numberOfInts;

    Node *node = new Node();
    head = node;

    for(int i = 0; i < numberOfInts; i++)
    {
        r >> node->data;
        cout << node->data << endl;
        node->next = new Node;
        node = node->next;
    }

}

这是我的头文件中的节点类

class Node
{
public:
    Node() {} //default constructor
    Node(int d, Node* q = 0) : data(d), next(q) {} //constructor with parameters data and next
    int data; //holds data in node
    Node* next;//pointer to next node
};

【问题讨论】:

  • 您已经遇到过哪些方法(“网络上的代码”)? (只是为了避免人们向您推荐相同的人)
  • 一个是模板 方法,一个更适合双链表和其他一些方法,但即使是解释它的人也会感到困惑。基本上我在寻找某种我认为的插入排序,但是在寻找它时,除非过于复杂,否则那里没有太多
  • @Tazzy 不需要模板。尝试将一些复杂因素分解为您可以在此问题中提出的问题。

标签: c++ sorting singly-linked-list


【解决方案1】:

看看这是否能让你正确地思考问题:

你从一副牌面朝上开始。您想对一副纸牌进行排序,但您必须遵循一些奇怪的规则。

您放置未排序的牌组,以便您只能看到最上面的牌。首先将第一张卡移动到您的排序堆(一张卡自动按排序顺序)。

查看下一张未分类的卡片。如果它比排在最前面的牌大(或小,无论如何),则将排在最前面的牌移到第三堆。继续将卡片一张一张地移动到第三堆,直到你的新卡片小于下一张已排序的卡片或已排序的卡片为空,然后将未排序的卡片移到已排序的卡片上。将卡片从第三堆一张一张地移回已排序的那堆。

重复上一步,直到未排序的堆为空。

【讨论】:

  • 我喜欢你的语言,我会从逻辑上考虑这个问题,非常感谢:)
猜你喜欢
  • 1970-01-01
  • 2016-07-05
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
相关资源
最近更新 更多