「データ構造とアルゴリズムにおける双方向連結リスト」

双方向連結リスト

リンクリストの概念は現実世界でもよく使われます。Spotifyを使用してキューの次の曲を再生するときには、学んだ単方向リンクリストの概念が活用されます。しかし、キューの前の曲を再生するためには、具体的には何ができるのでしょうか。

このブログでは、データ構造に関連する別の概念である双方向リンクリストについて理解しましょう。また、Cを使用したその実装とリアルタイムアプリケーションについても議論します。

双方向リンクリストとは何ですか?

リンクリストは、順次に接続されたノードを含む一種の線形データ構造です。ノードには、参照アドレスに格納されたデータと、参照ノードの左側と右側の両方のノードを指す2つのポインタが含まれています。

左のノードポインタは、シーケンス内の前のノードのメモリアドレスを格納し、右のノードは次のノードのメモリアドレスを格納します。ここでは、操作に基づいて実行時にメモリのサイズを割り当てまたは解放できるように、配列の代わりに動的メモリ割り当てを使用します。

この例では、ヘッドは最初のノードを指します。参照ノードの左ポインタにはNULLが格納され、最後のノードの右ポインタにも同様になります。

この例で操作を行うためには、さらにそれに応じて変更することができます。

双方向リンクリストの実装

1. 先頭にノードを挿入する

まず、上記の操作を実行するために、ノードを作成し、動的メモリを使用してメモリを割り当てます。ヘッドを新しいノードに向け、左と右のノードにはNULLの値を格納します。

2. 先頭のノードを削除する

先頭からノードを削除するには、ヘッドの参照アドレスの右ノード値を保存し、最初のノードを解放する必要があります。

3. 末尾にノードを挿入する

末尾にノードを追加するには、末尾までトラバースし、最後のノードを参照の新しいノードに指し、逆も同様にします。

4. 末尾のノードを削除する

末尾のノードを削除するには、リストをトラバースして末尾に到達する必要があります。最後から2番目のノードを指すポインタを使用します。そして、最後のノードを解放します。

基本的な操作を理解したので、Cを使用した双方向リンクリストの実装に進みましょう。

このコードは次の出力を提供します:

マルチプレイヤーゲームがどのように開発されるか、プレイヤーが繰り返しループでチャンスを得ることができるか、これは最後のプレイヤーが最初のプレイヤーに再びリンクされてループを形成することを意味します。

これを実現するために、リンクリストに関連する別の概念に進む必要があります。このような場合に便利なのが、循環リンクリストです。

循環リンクリスト

循環片方向リンクリストでは、リストの最後のノードには最初のノードへのポインタが含まれます。双方向リンクリストと単方向リンクリストの両方でこの概念を使用できます。

このリストの唯一の違いは、最後のノードの右ポインタが最初のノードを指し、ヘッドノードが常に最初のノードを指すことです。

結論

私の意見では、リンクリストの概念は、複雑な問題を解決する際に非常に重要で役立つものです。双方向リンクリストと循環片方向リンクリストは、さまざまなシナリオを通じて手を取り合って進む際に役立ちます。このブログをお楽しみいただけたことを願っています。今日のトピックに関するご意見を「いいね!」やコメントでぜひお寄せください。学習を楽しんでください!

データ構造、APIを使用したシステム統合に関する私の前のブログもご覧ください:

  • データ構造のスタック
  • データ構造とアルゴリズムのキュー
  • データ構造とアルゴリズムのリンクリスト
  • MuleSoftプラットフォームを使用したRAMLベースのAPI仕様の構築
  • MuleSoftプラットフォームを使用したAnypoint ExchangeへのAPIの公開

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more