ポインタを持つC++でリンクリストを実装するのは簡単です。しかし、他の言語(java、pythonなど)でどのように実装されていますか?私はリンクリストのための組み込みクラス(JAVAでサポートされている)を使用したくないのですが、リンクリストを作成するためにポインタを置き換える方法は何ですか?リンクリストはどのようにポインタを使わずに実装されていますか?
答えて
これらは、ポインタ演算を行うことができない本質的に(構文を除いた)ポインタで実装されています(いくつかの言語ではnullでもかまいません)。多くの言語では、デフォルトがバイナリであるC++とは異なり、参照は変数を使用するデフォルトの方法です。
+1私はその説明が大好きです。 Cの退役軍人にとって明白であることと、他の人にプログラミングの面を学ぶ理由を与えることを除いて、それはとても簡単で、簡単で正確です。 – delnan
他の言語では、ポインタに密接に関連する参照を扱います。
独自のクラスを記述する場合、class node
言うと、各node
は(それが最後の一つだ場合はnull)あなたが実際にその次のノードへの参照を保持し、次のnode
にフィールドを保持してい
の代わりにポインタはメモリのブロックを指し、参照は前に述べたように使用される。あなたがC++
Struct Node {
Node *last;
Node *next;
}
でなければならないようなので、それは次のようになります。
Struct Node {
Node last;
Node next;
}
良いデータ構造クラスは、リンクリストのような配列を使用して、任意の言語で実装することができることが示されますFORTRAN。
ポインタを使用する代わりに、次のリンクを見つけるために他の手段を使用します。配列では、ポインタの代わりに次の要素へのインデックスを使います。
したがって、ポインターではなくファイルの位置を使用して、ランダムアクセスファイルにリンクリストを実装できます。
これがリンクリストとして数えられるかどうかはわかりません。より限定されている点で、ポインタベースの実装とはまったく異なる特性を持っています。それとは別に、これは完全にポイントの横にあります。なぜなら、あなたは*標準のリンクリスト(および間接参照に依存する他のすべてのデータ構造)を参照で構築することができるからです。 – delnan
これはリストであり、リンクされています。ノードをリンクするためのポインタは使用しません。リンクされたリストの別の実装*です。私は大学のData Structuresクラスでこれを教えました。 –
この本ではよく答えが見つかるかもしれません - 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'を保持する。
うまくいけば、これが役に立ちます。
Thomas Matthewの答えに対する私のコメントを参照してください。 – delnan
リンクされたリストの概念は、ある要素から別の要素に到達できるということです。あなたはそれをどうやって行うのかは非常に異なっています。
たとえば、ポインタを使用することができます。どちらが別の方法を言ったかは、オブジェクトのメモリアドレスを使用することです。
しかし、これは単なる1つの方法です。すべてのオブジェクトが配列から参照された場合、その配列のインデックスでオブジェクトを参照することができます。そのため、リンクされたリストの各要素は、接続先のオブジェクトのインデックスを指定する整数を持ちます。
別の例を挙げてください。オブジェクトを文字列に関連付ける辞書があった場合。次に、文字列を使用して互いに参照することができます。
リンクリストのコアコンセプトはポインタではなく、リスト内の要素は接続先の要素を追跡する責任があるということです。
- 1. Linuxカーネルでpercpuポインタはどのように実装されていますか?
- 2. @privateはどのように実装されていますか?
- 3. BigDecimalはどのように実装されていますか?
- 4. HttpSessionはどのように実装されていますか?
- 5. removeEventListenerはどのように実装されていますか?
- 6. INativeElementViewはどのように実装されていますか?
- 7. PTRACE_SINGLESTEPはどのように実装されていますか?
- 8. テンソルフローはどのように実装されていますか?
- 9. \ bはどのように実装されていますか?
- 10. フィルタはどのように実装されていますか?
- 11. MarshalByRefObjectはどのように実装されていますか?
- 12. クロスバリデーションはどのように実装されていますか?
- 13. タスクスケジューリングはどのように実装されていますか?
- 14. os.path.fileはどのように実装されていますか?
- 15. getchar()はどのように実装されていますか?
- 16. モバイルバックグラウンドループはどのように実装されていますか?
- 17. ErlangはどのようにOSスレッドを使わずに並行処理を実装していますか?
- 18. ポインタを使用せずに参照でリンクリストを実装する方法
- 19. Collection.sortがどのように実装されていますか?
- 20. Wami Recorderは実際にどのように実装されていますか?
- 21. ARCのゼロ化弱ポインタ動作はどのように実装されていますか?
- 22. chshはどのようにlinuxに実装されていますか?
- 23. WebSocketハンドシェイクはどのようにPHPに実装されていますか?
- 24. ESBはどのように物理的に実装されていますか?
- 25. render_viewsはRSpecにどのように実装されていますか?
- 26. Linuxシステムコールに関して実装されたプロセスのバックグランドはどのようにして行われますか?
- 27. Objective Cではカテゴリはどのように実装されていますか?
- 28. RedisではBRPOPはどのように実装されていますか?
- 29. どのJAXP実装が使用されているか、どのJAXP実装がロードされたかを知るにはどうすればよいですか?
- 30. Pythonのリストクラスの__contains__メソッドはどのように実装されていますか?
これを読んで質問に十分対処しているかどうかを確認してください:http://stackoverflow.com/questions/7480783/pointers-in-java –
@asawyer PythonとJavaのリファレンスは何も渡されません。同じ意味で参照を使用する他の多くの言語では使用できません。 – delnan
@asawyer:delnanに同意します。 Javaは価値渡しです。常に。その値は参照値ですが、値は渡される値です。 –