62

リンク リストの定義は理解していますが、それをどのように表現し、共通の概念や項目に関連付けることができますか?

たとえば、OOP の構成 (編集: もともと「継承」と呼ばれていました) は、自動車に関連している可能性があります。実生活のすべての (ほとんどの) 自動車は本質的に同じものです。自動車にはエンジンがあり、それを start() したり、車を go() や stop() にしたりできます。通常、自動車には最大乗車人数がありますが、どちらも自動車であるバスとスポーツカーでは異なります。

継承の場合のように、単純な ole の単一リンク リストの直感的な実例はありますか? 典型的な教科書の Linked List の例は、整数と次へのポインタを持つノードを示していますが、あまり役に立ちません。

ご意見をお待ちしております。

4

32 に答える 32

58

リンクリストはコンガラインのようなものです。誰もが前の人の腰を握り、前と後ろの人だけを除いて、後ろの人が腰を順番に握ります。ラインに人を追加する唯一の方法は、適切な場所を見つけてその接続を切り離してから、新しい人を挿入することです。

于 2009-03-13T19:25:02.487 に答える
49

リンクリストの使い方の例ではなく、本の定義よりも比喩的な説明が必要だと思います。

リンクリストは、スカベンジャーハントのようなものです。あなたには手がかりがあり、その手がかりには次の手がかりを見つけるための場所へのポインターがあります。したがって、次の場所に移動して、別のデータと別のポインターを取得します。途中または最後に何かを取得するには、最初からこのリストに従う(またはチートする;))だけです。

于 2009-03-13T19:27:42.170 に答える
41

リンクリストの実際の実例は何ですか?

最も単純で最も簡単なのは電車です。

鉄道車両は特定の順序でリンクされているため、可能な限り最も効率的な方法で、積み込み、積み降ろし、移動、降車、およびピックアップを行うことができます。

たとえば、Jiffy Mixプラントには砂糖、小麦粉、コーンミールなどが必要です。曲がり角のすぐ近くには、塩素、硫酸、水素が必要な製紙プラントがあるかもしれません。

これで、列車を止め、中身の各車を降ろしてから列車を走らせることができますが、ケーソンから小麦粉を吸い出し、次に砂糖などを吸い出す間、列車の他のすべてのものを座らせる必要があります。

代わりに、車のチャンク全体を切り離すことができるように車が列車に積み込まれ、列車の残りの部分が移動します。

列車の終点は、途中の部分よりも切り離しやすく、ある場所で数台の車を切り離し、別の場所で数台の車を切り離すよりもはるかに簡単です。

ただし、必要に応じて、列車内の任意の場所でアイテムを挿入および削除できます。

リンクリストによく似ています。

-アダム

于 2009-03-13T19:37:30.880 に答える
19

最初に理解することは、リンクリストは概念的に配列と同じであるということです。

唯一の違いは、さまざまな操作の効率にあります。最も重要なこと:

  • 中央への挿入:リストの場合はO(1)、配列の場合はO(n)。
  • 中央の要素への直接アクセス:リストの場合はO(n)、配列の場合はO(1)。

したがって、配列に使用できる類推(飛行機のすべてのエンジン、ショッピングリストのすべてのアイテム...)はリンクリストにも適用されますが、効率を考慮すると、別の類推を行うことが適切になる可能性があります。

配列は本棚のボックスになります。n番目の行からボックスを削除するときは、n + 1以上のすべてのボックスを1つ下の棚に移動する必要があります(これにより、面倒な空の棚がなくなります)。

逆に、リンクリストはネックレスになります。その青い宝石がもう気に入らない場合は、シーケンスから外して、結果の2つの端を結びます。ネックレスを固定できるように、各真珠をループして移動する必要はありません。

于 2009-03-13T19:31:42.300 に答える
15

窓口・レジ等の待ち行列…

順番に実行しなければならない一連の命令。

任意のFIFO構造は、リンクされたリストとして実装できます。

于 2009-03-13T19:11:23.393 に答える
12

実際の例:

**1) 単方向リスト **

  1. 子供の人間の脳(たとえば詩を覚えるためには、それをリンクする必要があります。最後の行を尋ねると、最初の行から読まなければなりません)
  2. ネットワーク上でのメッセージ配信 (メッセージはパケットに分割され、各パケットには次のパケットのキーが含まれているため、受信側で簡単にクラブ化できます)

2) 二重連結リスト

  1. DNA分子
  2. 戻るボタンを使用できるブラウザキャッシュ。
  3. 列車の客車は、前後の客車と接続されています。
  4. 自転車のローラーチェーン(二重循環連結リスト)

3) 循環リンクリスト

  1. エスカレーター
  2. オペレーティング システムでのプロセスのスケジューリング中にスケジューラが使用するタイム シェアリングの問題。
  3. マルチプレイヤーボードゲーム
于 2016-09-14T06:30:38.870 に答える
12

何年も前、大学の最初のクラスの 1 つで、連結リストをどこで使用するかを考えていたことを覚えています。今日、私が取り組んでいるプロジェクトで、使用していないプロジェクトは 1 つもないと思います。これは信じられないほど基本的なデータ構造であり、現実の世界で頻繁に使用されていることを信じてください。

例えば:

  • 医用画像アプリケーションで CD に書き込む必要がある画像のリスト
  • 何らかの通知を電子メールで送信する必要がある Web サイトのユーザーのリスト
  • 画面にレンダリングする必要がある 3D ゲーム内のオブジェクトのリスト

今は少し役に立たないように思えるかもしれませんが、数年後に同じ質問を自問してみてください。

編集: ポインタが重要な理由について尋ねたコメントの1つで気づきました。リンクされたリストのユーザーにとってポインターは実際には重要ではないと誰かが正しく答えました。ユーザーは、物事のリストを含むリストが欲しいだけです。そのリストにそのリストがどのように「含まれる」かは、ユーザーにとって実際には問題ではありません。ポインターはその「方法」の一部です。床に引かれた、出納係につながる線を想像してみてください。出納係に行くには、その列に並んでいる必要があります。この行は、リンクされたリストが使用するポインターの類推です (そして、これは少し大げさであることは認めます)。窓口で列に並んだ最初の人がリストの先頭です。列のすぐ後ろにいる人が、リストの次の人です。そして最後に、列の最後の人がリストの最後尾です。

于 2009-03-13T19:15:14.587 に答える
10

Blame が、プロジェクト内のさまざまなモジュールに取り組んでいる多数のソフトウェア エンジニアの間を移動する方法。

まず、GUI 担当者は、製品が機能しないことで非難されます。彼は自分のコードをチェックし、それが自分のせいではないことを確認しました: API がおかしくなっています。API担当者は自分のコードをチェックします。彼のせいではなく、ロガーモジュールの問題です。ロガーモジュールの男は今、データベースの男を非難し、インストーラの男を非難し、誰が非難しています...

于 2010-03-12T09:14:41.913 に答える
8

あなたのDNA分子は二重リンクリストです。

于 2010-03-12T09:01:25.180 に答える
8

チェーン:

代替テキスト

特にローラーチェーン:

代替テキスト

チェーンの各要素は、その後続要素と先行要素に接続されています。

于 2010-03-12T09:21:28.747 に答える
6

一般的に、リンクされたリストは、遭遇する最も恐ろしいほど便利なものの 1 つです。

実際の例:

  • 何かのために並んで待っている人々の集まり - 「キュー」と呼ばれる特別な種類の LL。

  • 陶器のキャビネットに積み上げられた皿 - 「積み上げ」と呼ばれる特別な種類の LL。

  • 「take a number」行 (数字がある時点で「1」からやり直さなければならない) - 「循環キュー」と呼ばれる特別な種類の LL。

一般的に、ほとんどすべてのリンクされたデータ構造に使用するのが好きな比喩は、カードのデッキです。リンクされたリストでできるほとんどのことは、カードのデッキを使用して視覚化できます。これは、いくつかの難解なソート アルゴリズムで何が起こっているかを示すのに特に便利です。

私の個人的なお気に入り: Bogosort = デッキがソートされるまで 52 枚のカードをピックアップします。:-)

于 2009-03-13T20:29:11.600 に答える
6

考えてみれば、「リンク」は単に、データインスタンス間の「次」、「前」、「子」、または「親」の関係を識別する方法です。 したがって、実際のアプリケーションの中には、さまざまなアプリケーションがあります。基本的なリンク リストの単純なリスト (食料品リストなど) を考えてみてください。しかし、グラフ (地図上の都市間の距離のプロット、生物学における種間の相互作用) またはツリー (組織内の階層またはデータベースのインデックス内のデータの 2 つの非常に多様な例) を配置できる用途についても考慮してください。

于 2009-03-13T19:13:20.563 に答える
5

リンクされたリストを使用してキューを実装できます。標準的な実際の例は、レジ係の列です。

リンク リストを使用して、スタックを実装することもできます。コノニカルな現実の例は、ビュッフェ レストランのプレート ディスペンサーの 1 つです。

于 2009-03-13T19:17:49.540 に答える
2

この質問に対する私の最初の反応は、「見回してください!これはどこにでもあります!」でした。でも、少し考えてみたら、工夫されていない例は思いつかなかった。

リンクリストの概念は、複合概念である2つのferです。あなたはリストの概念を持っていますが、それは問題ありません。たとえば、食料品のリスト。次に、リンク部分に移動します。ある食料品が次の食料品を知らないため、モデルが故障します。

実世界の例を見つけるのに苦労している理由は、リンク部分がプログラミングアーティファクト、実装の詳細であるためだと思います。プログラムでリストを実装する方法はたくさんありますが、1つの良い方法は、各リスト項目にその隣接項目について知らせることです。もう1つの方法は、アイテムとその順序を追跡するListオブジェクトを用意することです。これは、ほとんどのリストが実際に機能する方法です。上記の例では、食料品リストのListオブジェクトは、それが書かれている紙(または何でも)になります。

たぶん、リスト全般について考え、リンクリストをリストの特定の実装として見る方が便利かもしれません。

于 2009-03-13T19:49:49.230 に答える
2

二重にリンクされたリストの最も簡単な例は、Train です。

ここに画像の説明を入力

ここで各コーチは前後のコーチに接続されています(最初と最後を除く)

プログラミングの観点から、コーチ本体をデータ (値) ノード、コネクターを参照ノードと見なします。

于 2013-10-23T13:54:13.293 に答える
1

プログラム内makeでは、ビルドする必要のある特定のファイルの依存関係リストが、他のファイルへのポインターのリンクリストとして定義されており、リンクリストに依存関係があることがよくあります。

于 2009-03-13T19:25:07.760 に答える
1

移動方向の指定:方向の各ステップをノードとし、各ノード間の移動指示をリンクとします。

例:

ノード1:自宅で開始

リンク:ボブの家まで南に3ブロック歩く

ノード2:ボブの家

リンク:アリスの家まで北に2ブロック歩きます。

ノード3:アリスの家

ある場所から別の場所に移動したい場合は、各中間の場所(ノード)からリンク(指示)をたどる必要があります。自宅からアリスにスキップすることはできません。

于 2009-03-13T19:25:33.937 に答える
1

リンクリストを見てください:

[A] => [B] => [C] => [D] =>

それは...電車です!各鉄道車両には何かが含まれており、別の鉄道車両に接続されています(または最後の車両には何も接続されていません)。鉄道車両は最後に追加することしかできません。鉄道車両を削除したい場合は、前の車両と次の車両を接続する必要があります。

于 2009-03-13T20:00:04.603 に答える
1

オペレーティングシステムでは...実行中のプロセスとスリープ中のプロセスを追跡するためにリンクリストを使用できます...実行中のプロセスとスリープを希望するプロセス...実行を追跡するLinkedListから削除されますプロセスを実行し、スリープ時間が終了すると、それをアクティブ プロセスの LinkedList に戻します。

たぶん、新しいOSはいくつかのファンキーなデータ構造を使用しています...そこでリンクされたリストを使用できます

于 2010-03-12T09:11:31.317 に答える
1

リンクされたリストは、それぞれに 1 つの項目がある紙の束に非常に似ています。(ペグボードのような配列とは対照的に。)一般に、次の特性を持つ問題を解決するために使用されます。

  • 不明または変更可能なアイテムの数があります
  • アイテムはリストのように順番に並んでいます
  • 項目は、再配置、中間リストへの追加、中間リストでの削除などを行う場合があります。

単純な配列を再配置するのは苦痛であり、配列に十分なメモリがあることを確認しながら途中のどこかに要素を追加するのは苦痛です。リンクされたリストを使用すると、これらの操作は簡単です。アイテム #10 をアイテム #2 とアイテム #3 の間に移動したいとします。紙があれば、それを拾って移動するだけです。配列では、項目 3 から 9 をスロットの上に移動してから、それを入れる必要があります。リンクされたリストでは、次のようにします。 3の次は10を教えてください。

アイテムを追加するのがいかに簡単で、「リスト内のすべてのアイテムに対してこのアクションを実行する」とプログラムで言うのが簡単なため、私は現在それらのいくつかを使用しています。それらの 1 つは、スプレッドシートのようなエントリのリストです。もう 1 つは、最初のリストを調べて、特定の値を持つすべてのアイテムへの参照を追加することで、それらに対してバッチ操作を実行できるようにします。途中から項目を抜き取ったり、途中に追加したりでき、配列の長さを気にする必要がありません。私の経験では、これらが主な利点です。

于 2009-03-13T20:42:57.370 に答える
1

.NET BCL では、クラスSystem.Exceptionには と呼ばれるプロパティがありInnerException、これは別の例外を指すか、または ですnull。これにより、リンクされたリストが形成されます。

ではSystem.TypeBaseTypeプロパティは同じ方法で別のタイプを指しています。

于 2009-03-13T19:19:46.807 に答える
1

電話チェーンは、リンクされたリストとして直接実装されます。仕組みは次のとおりです。

  1. グループの主催者は、すべてのメンバーの電話番号を収集します。

  2. オーガナイザーは、各メンバーに他の 1 人のメンバーの電話番号を割り当てます。(メッセージが通過したことがわかるように、独自の番号を割り当てることもありますが、これはオプションです。)

  3. メッセージを送信する必要がある場合、主催者はリストの先頭に電話してメッセージを配信します。

  4. ヘッドは割り当てられた番号に電話し、メッセージを配信します。

  5. 手順 4 は、全員がメッセージを聞くまで繰り返されます。

ステップ 2 で全員がリンクされるようにリストを設定するには、明らかに注意が必要です。また、リストは通常​​公開されているため、誰かが留守番電話またはビジー トーンを受け取った場合、次の番号に電話してチェーンを動かし続けることができます。

于 2009-03-13T20:06:02.093 に答える
1

彼は実際の例を求めました。だから私はそれを試してみます:

ファイアウォールを作成しているとしましょう。このファイアウォールには、IP ホワイトリストと IP ブラックリストがあります。

自分の IP、ジョブの IP、および一部のテスト IP をホワイトリストに登録する必要があることはわかっています。したがって、すべての IP をホワイトリストに追加します。

これで、ブロックする必要がある既知の IP のリストも作成されました。したがって、これらの IP をブラックリストに追加します。

なぜこれに LinkedList を使用するのでしょうか?

  1. リストからアイテムを追加/削除するための操作は高速です。
  2. ブロック/ホワイトリストに登録される IP の数はわかりません。したがって、LinkedList の主な利点の 1 つが明らかになります (サイズ変更可能)。
于 2013-10-05T02:14:44.767 に答える
1

先生が生徒を漫画映画に連れて行ったが、席を合わせることができなかった場合、彼女は生徒に次の生徒の住所(座席番号)などを覚えておくように頼みます.帰りながらトラブルに立ち向かう!!!

于 2011-09-19T20:13:55.470 に答える
0

リンクされたリストの良い例は、テキスト メッセージです。このメッセージでは、特定のパケットが複数のパケットに分割される場合があります。各パケットは、次のキーと n 番目のキーに接続するキーを保持し、キーとデータを含むテキスト メッセージ全体を作成します。

于 2012-05-07T07:29:55.793 に答える
0

Linked List をデータ構造として見てください。OODで自己集合を表現する仕組みです。そして、あなたはそれを現実世界のオブジェクトと考えるかもしれません (一部の人にとっては現実です)

于 2009-03-13T19:31:26.123 に答える
0

私は、真珠のネックレスのような円形の連結リストを考えるのが好きで、各真珠には少しのデータが含まれています。文字列をたどって次のデータの真珠に到達すると、最終的には最初に戻ります。

于 2009-03-13T19:13:57.443 に答える
0

2 つ以上のコンパートメントを持つ 2 つ以上のボックスを検討してください。(この例では、各ボックスに 2 つのコンパートメントがあります) 最初のコンパートメントにはいくつかの情報が含まれます。数字または単語。2 番目のコンパートメントには、次のボックスを指す矢印が保持されます。

各ボックスには、矢印 (ポインタ) と情報 (データ) を含むマルチペール コンパートメントを含めることができることに注意してください。

于 2013-08-18T08:40:27.720 に答える
0

彼らはいつも就学前の子供たちにこれをしています。彼らが道路などで屋外にいるとき、各子供は他の子供たちの手を握るように求められます. 子供はそれぞれ、誰の手を握るべきかを知っています。それが彼らが道を渡る方法です。これは双方向リストの典型的な例だと思います。

于 2016-05-24T16:19:39.287 に答える