0

当谈到 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
};
4

1 回答 1

0

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

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

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

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

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

于 2011-04-27T13:35:24.077 回答