单链连锁印刷c ++

时间:2012-11-15 01:51:36

标签: c++ linked-list

我试图以{1,2,3,4等}的格式选择我的链。您可以在下面找到具有节点布局的头文件。我只是对如何在我的列表中循环打印出项目感到困惑。

非常感谢任何指导!

set.h

using namespace std;

#include <iostream>

class Set
{
  private:

    struct Node
    {
      int Item;      // User data item
      Node * Succ;   // Link to the node's successor
    };

    unsigned Num;    // Current count of items in the set
    Node * Head;     // Link to the head of the chain

  public:

    // Return information about the set
    //
    bool is_empty() const { return Num == 0; }
    unsigned size() const { return Num; }

    // Initialize the set to empty
    //
    Set();

    // Insert a specified item into the set, if possible
    //
    bool insert( int );

    // Display the set
    //
    void display( ostream& ) const;

};

6 个答案:

答案 0 :(得分:3)

以下是两条建议:1)首先对列表进行排序,然后打印所有节点; 2)为数据创建另一个列表(索引)并对这些链接进行排序(不需要这些节点中的数据)。

首先排序列表

常用的技术是按照您希望打印的顺序对节点进行排序。这应该涉及更改链接字段 接下来,从头节点开始并打印列表中的每个节点(或列表中每个节点的数据)。

使用索引列表

创建另一个没有数据字段的链接列表。此列表中的链接指向原始列表中的数据字段。按照您希望节点打印的顺序排列新列表 该技术保留了第一个列表的创建顺序,并允许不同的排序方案。

更改链接

由于您正在编写自己的链接列表,因此更改链接仍然是一项练习,因为我没有收到编写代码的报酬。在SO以及用于排序和遍历链表的Web上有很多例子。

答案 1 :(得分:1)

你只想做这样的事情:

void Set::display(ostream &out) const {
    for(int i=0; i<Num; i++) {
        out << Pool[i] << " ";
    }
    out << endl;
}

ostream表现为cout

答案 2 :(得分:1)

很难得到你的问题。如果要将数组打印到屏幕,则应考虑编写display()之类的:

#include <iostream>
#include <iterator>
void Set::display() const {
   ostream_iterator<int> out_it (cout," ");
   copy(Pool,Pool+Num,out_it);   
   cout << endl;
}

或者如果你想写一个ostream&(正如@alestanis在answer中指出的那样)

#include <iostream>
#include <iterator>
void Set::display(ostream &out) const {
   ostream_iterator<int> out_it (out," ");
   copy(Pool,Pool+Num,out_it);   
   out << endl;
}

答案 3 :(得分:1)

没有测试,我会做这样的事情。 (假设最后一个节点的Succ设置为NULL,正如我建议的那样。)

void LoopList(struct Node *head)
{
    for (struct Node *p = head; p != null; p = p->Succ)
    {
        // Do whatever with this node
        Print(p);
    }
}

答案 4 :(得分:0)

我想我是在思考它。无论如何,这是我最终做的。现在我只需要为逗号添加一些格式,并且我都可以设置。

Node * Temp;
Temp = new (nothrow) Node;
Temp = Head;
out << "{";
while(Temp->Succ)
{
      out << Temp->Item;
      Temp = Temp->Succ;
}
out << '}' << endl;

答案 5 :(得分:-2)

假设您的列表是周期性的,您可以使用:

struct Node *n = begin;

if (n != NULL) {
    //do something on it
    ...
    for (n = begin->Succ; n != begin; n = n->Succ) {
    }
}

struct Node *n = begin;
if (n != NULL) {        
    do {        
        //do something
        ...
        n = n->Succ;
    } while (n != begin)
}