0

{1,2,3,4,etc} の形式でチェーンを選択しようとしています。ノードのレイアウトを含む以下のヘッダー ファイルを見つけることができます。リストを循環してアイテムを印刷する方法について混乱しています。

どんなガイダンスも大歓迎です!

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;

};
4

6 に答える 6

3

2 つの推奨事項を次に示します。1) 最初にリストをソートしてから、すべてのノードを出力します。2) データに別のリスト (インデックス) を作成し、それらのリンクを並べ替えます (これらのノードにデータは必要ありません)。

リストを最初に並べ替える

よく使用される手法は、印刷したい順序でノードを並べることです。これには、リンク フィールドの変更が必要です。
次に、先頭ノードから開始して、リスト内の各ノード (またはリスト内の各ノードのデータ) を出力します。

索引リストの使用

データ フィールドのない別のリンク リストを作成します。このリストのリンクは、元のリストのデータ フィールドを指しています。ノードを印刷する順序で新しいリストを並べます。
この手法では、最初のリストの作成順序が保持され、さまざまな順序付けスキームが可能になります。

リンクの変更

あなたは独自の Linked List を書いているので、リンクの変更は演習として残されています。あなたのコードを書くことで私は報酬を得ていないからです。リンクされたリストの並べ替えとトラバースについては、SO だけでなく Web にも多くの例があります。

于 2012-11-15T02:02:17.180 に答える
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);
    }
}
于 2012-11-15T01:59:35.930 に答える
1

ご質問がわかりにくいです。配列を画面に出力したい場合は、次のdisplay()ように書くことを検討する必要があります。

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

または( @alestanisによる回答ostream&で指摘されているように)に書き込みたい場合

#include <iostream>
#include <iterator>
void Set::display(ostream &out) const {
   ostream_iterator<int> out_it (out," ");
   copy(Pool,Pool+Num,out_it);   
   out << endl;
}
于 2012-10-31T18:01:08.820 に答える
1

次のようなことをしたいだけです:

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

Anostreamはそのまま動作しcoutます。

于 2012-10-31T17:57:46.217 に答える
0

考え過ぎていたと思います。とにかく、ここに私がやったことがあります。これで、コンマの書式を追加するだけで、すべて設定されました。

Node * Temp;
Temp = new (nothrow) Node;
Temp = Head;
out << "{";
while(Temp->Succ)
{
      out << Temp->Item;
      Temp = Temp->Succ;
}
out << '}' << endl;
于 2012-11-15T02:45:55.103 に答える
-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)
}
于 2012-11-15T02:01:38.860 に答える