2011-01-01 1 views
1

リニアリンクリストのデータ構造を理解する上で問題があります。リニアリンクリストの理解

class Node{ 
    Object data; 
    Node link; 

    public Node(Object pData, Node pLink){ 
     this.data = pData; 
     this.link = pLink; 
    } 
} 

は、我々はクラスリスト(再帰原理)を定義する必要はありませんので、リストには、ノードをリンクされていることを言うそれをシンプルに保つために:これは、私は、リストの要素を定義する方法です。

私の問題は、ノードがどのように接続されているか、より正確にはそれらを接続するときのノードの順序を理解することが本当に混乱していることです。

Node n1 = new Node(new Integer(2), null); 
Node n2 = new Node(new Integer(1), n1); 

リンクとは?それは前の要素ですか、次の要素ですか?このデータ構造の理解に役立つその他の提案はありますか?

答えて

5

多分、この図はあなたが理解するのに役立ちます。

alt text

(矢印はJava用のポインタ参照されていないことに注意してください)

「リスト」は非常に最初のノードへの参照になります。

+0

+1 - いいグラフィックです。 – duffymo

1

単独リンクのリストでは、「次へ」です。

Javaのように見えますが、タグ付けしていないにもかかわらずです。それが本当ならば、ジェネリック医薬品の使用を検討:

public class Node<T> 
{ 
    T value; 
    Node<T> next; 
} 
4

linkは、リスト内の次のノードへの参照です。

リストの最初のノード(n1)から開始します。これは直接参照してください。リスト内の2番目のノードを取得するには、n1.linkを参照します。リストを反復するために

、あなたがそのようなn1として、いくつかの出発点を持っていなければならないでしょう、そして、繰り返しlinkを参照:

Node n = n1; 
while (n != null) { 
    println(n.data); 
    n = n.link; 
} 
0

私は2つの提案があります。

まず、「これは前または次の要素ですか?」ということです。データ構造によって異なります。通常それは次の要素です。

第2に、ポインタまたは参照を使用することをおすすめします。例えばので

:(thisはポインタであり、かつnewオペレータは、ポインタを返しわからないあなたががC++を使用している場合、あなたはlanugageを指定していないので、そして、あなたのC++の構文が正しくありません。):

class Node { 
    Object data; 
public: 
    Node *next; 

    Node (Object pData, Node *pLink) { 
     this->data = pData; 
     this->next = pLink; 
    } 
} 

これはより有効な構造になります。次に、あなたが行うことができます:

Node *n3 = new Node(new Integer(2), null); 
Node *n2 = new Node(new Integer(1), n1); 
Node *n1 = new Node(new Integer(3), n2); 

または単に

Node *n1 = new Node(new Integer(3), new Node(new Integer(1), new Node(new Integer(2), NULL))); 

を次のように続いて、リストを反復処理できます。

for (Node *current = n1; current != NULL; current = current->next) 
{ 
    // do something with the current element 
} 

私はこれが役に立てば幸い!あなたは現代の言語を使用する場合は


、すでに既成のが、C++のSTLにリスト構造をリンク.NETにはSystem.Collections.Generic中だと私は、Javaの対応もあると確信しています。

+0

それはJavaです...... –

+0

はい、Java ListインターフェイスとそのためのLinkedList実装があります。私は、実装の詳細を理解しようとする学生であるため、問題はまだ適切であると推測しています。 – duffymo