2012-08-24 9 views
5

ポインタを持つC++でリンクリストを実装するのは簡単です。しかし、他の言語(java、pythonなど)でどのように実装されていますか?私はリンクリストのための組み込みクラス(JAVAでサポートされている)を使用したくないのですが、リンクリストを作成するためにポインタを置き換える方法は何ですか?リンクリストはどのようにポインタを使わずに実装されていますか?

+0

これを読んで質問に十分対処しているかどうかを確認してください:http://stackoverflow.com/questions/7480783/pointers-in-java –

+2

@asawyer PythonとJavaのリファレンスは何も渡されません。同じ意味で参照を使用する他の多くの言語では使用できません。 – delnan

+1

@asawyer:delnanに同意します。 Javaは価値渡しです。常に。その値は参照値ですが、値は渡される値です。 –

答えて

26

これらは、ポインタ演算を行うことができない本質的に(構文を除いた)ポインタで実装されています(いくつかの言語ではnullでもかまいません)。多くの言語では、デフォルトがバイナリであるC++とは異なり、参照は変数を使用するデフォルトの方法です。

+2

+1私はその説明が大好きです。 Cの退役軍人にとって明白であることと、他の人にプログラミングの面を学ぶ理由を与えることを除いて、それはとても簡単で、簡単で正確です。 – delnan

5

他の言語では、ポインタに密接に関連する参照を扱います。

0

独自のクラスを記述する場合、class node言うと、各nodeは(それが最後の一つだ場合はnull)あなたが実際にその次のノードへの参照を保持し、次のnodeにフィールドを保持してい

2

の代わりにポインタはメモリのブロックを指し、参照は前に述べたように使用される。あなたがC++

Struct Node { 
    Node *last; 
    Node *next; 
} 

でなければならないようなので、それは次のようになります。

Struct Node { 
    Node last; 
    Node next; 
    } 
+0

最後の文は残念です。 「ノード」が値の型である、つまり、「ノード」の2番目の定義が無限のサイズであるため無効であることを意味します。参照は実際にはアドレスではありませんが、*回帰です。 – delnan

+0

今削除された説明を無視しても、2番目の例が無効であることに気付きました。 (それがC++であると想定されている場合) – delnan

+0

これは単純に擬似コードの視覚化であると考えられていました。 StructはちょうどC++の彼のバックグラウンドから来た –

0

良いデータ構造クラスは、リンクリストのような配列を使用して、任意の言語で実装することができることが示されますFORTRAN。

ポインタを使用する代わりに、次のリンクを見つけるために他の手段を使用します。配列では、ポインタの代わりに次の要素へのインデックスを使います。

したがって、ポインターではなくファイルの位置を使用して、ランダムアクセスファイルにリンクリストを実装できます。

+0

これがリンクリストとして数えられるかどうかはわかりません。より限定されている点で、ポインタベースの実装とはまったく異なる特性を持っています。それとは別に、これは完全にポイントの横にあります。なぜなら、あなたは*標準のリンクリスト(および間接参照に依存する他のすべてのデータ構造)を参照で構築することができるからです。 – delnan

+0

これはリストであり、リンクされています。ノードをリンクするためのポインタは使用しません。リンクされたリストの別の実装*です。私は大学のData Structuresクラスでこれを教えました。 –

0

この本ではよく答えが見つかるかもしれません - http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844 - 私はあなたのために思い出したことを要約します。

基本的には、同じサイズの2つの配列があります(おそらくnより大きいn =格納する要素の数)。配列Aと配列Bと呼びます。

配列A [i]はデータ値を保持します。配列B [i]はA [i]→next = A [k]となるように '次の'値 'k'を保持する。

うまくいけば、これが役に立ちます。

+0

Thomas Matthewの答えに対する私のコメントを参照してください。 – delnan

0

リンクされたリストの概念は、ある要素から別の要素に到達できるということです。あなたはそれをどうやって行うのかは非常に異なっています。

たとえば、ポインタを使用することができます。どちらが別の方法を言ったかは、オブジェクトのメモリアドレスを使用することです。

しかし、これは単なる1つの方法です。すべてのオブジェクトが配列から参照された場合、その配列のインデックスでオブジェクトを参照することができます。そのため、リンクされたリストの各要素は、接続先のオブジェクトのインデックスを指定する整数を持ちます。

別の例を挙げてください。オブジェクトを文字列に関連付ける辞書があった場合。次に、文字列を使用して互いに参照することができます。

リンクリストのコアコンセプトはポインタではなく、リスト内の要素は接続先の要素を追跡する責任があるということです。

関連する問題