リンクリストの概念をC言語で説明する
リンクリストを理解する前に、Cプログラミング言語での配列の欠点とポインタの利点について学びましょう。
アレイのデメリット
-
静的メモリ割り当てが含まれます
-
アレイではメモリの浪費が発生する可能性があります。
-
メモリの不足は、アレイの重要な欠点の1つです。
ポインタの利点
- 動的メモリ割り当てが含まれます。
- メモリの効果的な使用はポインタで体験できます。
リンクリスト
リンクリストは動的メモリ割り当てを使用します。つまり、それに応じて拡大および縮小します。それらはノードのコレクションとして定義されます。ここで、ノードにはデータとリンクの2つの部分があります。データ、リンク、およびリンクリストの表現を以下に示します-
リンクリストの種類
リンクリストには次の4種類があります-
- 単一/単一リンクリスト
- 二重/二重リンクリスト
- 循環単一リンクリスト
- 循環二重リンクリスト
単一のリンクリスト
以下の表現を参照してください-
ノードは次の2つの部分で構成されています-
- データ
- リンク
リンクフィールドは常にリスト内の次のノードを指します。
最後のノードのリンクフィールドはnullです。
二重リンクリスト
以下の表現を参照してください-
ノードは3つの部分で構成されています。つまり
- データ部分
- 左リンク
- 右リンク
左のリンクは常にリストの左のノードを指し、右のリンクは常にリストの右のノードを指します。
最初のノードの左側のリンクと最後のノードの右側のリンクはNullである必要があります。
循環単一リンクリスト
以下の表現を参照してください-
ノードは2つの部分、つまり
で構成されます- データ部分
- リンク部分
リンクフィールドは常にリスト内の次のノードを指します。
最後のノードのリンク部分は常に最初のノードを指します。
循環二重リンクリスト
以下の表現を参照してください-
ノードは3つの部分で構成されています。つまり、
- データ部分
- 左リンク
- 右リンク
左のリンクは常にリストの左のノードを指し、右のリンクはリストの右のノードを指します。
最初のノードの左側のリンクは最後のノードを指し、最後のノードの右側のリンクは最初のノードを指します。
-
リンクリストの代替ノードの積
n個のノードがある場合、タスクはリンクリスト内の代替ノードの積を出力することです。プログラムは、ノードの場所を実際に変更せずに、代替ノードの製品のみを印刷する必要があります。 例 Input -: 10 20 30 40 50 60 Output -: 15000 上記の例では、10個の代替ノードである最初のノードから開始すると10、30、50であり、それらの積は10 * 30 * 50=15000です。 上の図では、最初のノードから開始し、赤色のノードが重要ではないノードである場合、青色のノードが代替ノードです。 以下で使用するアプローチは次のとおりです 一時的なポインタを取
-
リンクリストのノードをC言語で指定されたインデックスに出力します
与えられたインデックスでリンクリストのノードのデータを印刷する必要があります。配列のリンクリストとは異なり、通常はインデックスがないため、リンクリスト全体をトラバースして、特定のリストに到達したときにデータを出力する必要があります。 たとえば、リストにノード29、34、43、56、88が含まれ、インデックスの値が1、2、4である場合、出力はこれらのインデックスのノードである34、43、88になります。 例 Linked list: 29->34->43->56->88 Input: 1 2 4 Output: 34 43 88 上記のリンクリストの表現で、黄色