2011-04-27 61 views
0

当谈到C++时,我是世界上最基本的人,我想知道如果你们能帮我解决问题,那么你们是否可以帮助我。我试图对读取到istream的节点进行排序,但是它们是在读入的。网络上的代码非常复杂,我想知道是否有一个非常基本的方法来实现这一点。当插入到istream中时,对单个链表进行排序C++

这是我读法,至今它读入这是伟大的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 
}; 
+0

您遇到的方法(“网上的代码”)是什么? (只是为了避免人们向你推荐同样的东西) – jonsca 2011-04-27 13:22:04

+0

其中一个是模板方法,另一个更适合双链表和其他几个人,但即使是解释它的人也会感到困惑。基本上我正在寻找某种插入排序我想,但是在寻找它的时候,除非过于复杂,否则没有太多的东西 – 2011-04-27 13:24:09

+0

@jonsca对不起忘了标记 – 2011-04-27 13:25:00

回答

0

看看这个让你正确地思考这个问题:

开始时你有甲板的牌面朝上。你想排序一副牌,但你必须遵循一些奇怪的规则。

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

看看下一个未分类卡。如果它比顶部分类的卡片更大(或更小),那么将顶部分类的卡片移动到第三堆。继续将卡片逐一移动到第三堆,直到您的新卡片小于下一个分拣卡片或分拣的堆垛为空,然后将未分类的卡片移动到已分拣的堆上。将卡从第三堆一个接一个地移回分类堆。

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

+0

我喜欢你的语言,我会从逻辑上思考这个问题,非常感谢你:) – 2011-04-27 13:40:38