最も理解しやすいリンクリストの説明

まず、リンクリストとは何かをお見せしましょう。

リンクリストは、物理ストレージユニット上の非連続、非順次ストレージ構造であり、データ要素の論理シーケンスは、リンクリスト内のポインターのリンク順序によって実現されます。リンクリストは一連のノードで構成され(リンクリストの各要素はノードと呼ばれます)、実行時に動的に生成できます。各ノードには2つの部分があります。1つはデータ要素を格納するためのデータフィールドであり、もう1つは次のノードのアドレスを格納するためのポインタフィールドです。線形テーブルシーケンス構造と比較すると、操作は複雑です。リンクリストは順番に格納する必要がないため、挿入時にO(1)の複雑さに達する可能性があります。これは、別の線形リストシーケンステーブルよりもはるかに高速ですが、ノードの検索またはノードへのアクセスにはO(n)が必要です。線形テーブルとシーケンステーブルの時間計算量は、それぞれO(logn)とO(1)です。
ここに画像の説明を挿入
上記の一節を読んだ後、過去10年間の教育は無駄だったと思いますか?もちろん、あなたはすべての単語を知っていますが、それをつなげると理解できないのはなぜですか?

簡単に言えば、
リンクリストは順番に接続されなくなります。リンクリストの先頭は、最初のノードまたはヘッドノードを指すヘッドポインタから始まります。各ノードには2つの部分があります。データフィールドは要素のデータを格納するために使用され、ポインタフィールドは次のデータの場所を格納するために使用されます。これは香港映画の情報提供者のように感じますか?あなたの直属の上司が死んだら、あなたはゲになりますか?同様に、ポインタフィールドが次のノードを指していない場合(最後のノードのポインタフィールドはすべて「NULL」を指しています)。次に、このリンクリストが終了したことを意味します。


リンクリストの基本を理解したので、次にリンクリストのデータ構造を見てみましょう。

//数据结构
typedef struct monster{
    
    
      int id;      //编号
      char *name;  //名称
        
      //指向下一结点的指针
      struct monster *pNext;
}Monster;

構造を見ただけでは何も見えないので、印象を強めるために真剣に戦わなければなりません。

//示例
typedef struct Monster{
    
    
    int id;
    char *name;
    struct Monter *next;   //指向下个结点的指针
}Monster;

void test()
{
    
    
    Monster monster1 = {
    
    1, "乔布斯"};
   Monster monster2 = {
    
    2, "比尔·盖茨"};
   Monster monster3 = {
    
    3, "巴菲特"};
   
   //monster1 就是头指针
   monster1.next = &monster2;
   monster2.next = &monster3;
   monster3.next = NULL;
}

ここでは、ヘッドポインタとヘッドノードの基本的な概念について説明します。

ヘッドポインタ:
リンクリストの最初のノードの保存場所;ヘッドノード:単一リンクリストの最初のノードの前に接続されたノード。

2つの類似点と相違点

ヘッドポインタ ヘッドノード
リンクリストにヘッドノードがある場合は、ヘッドノードへのポインタです。そうでない場合は、リンクリストの最初のノードへのポインタです。 ヘッドノードは、操作の統一性と利便性のために設定され、最初のノードの前に配置されます。そのデータフィールドは通常、意味がありません(ただし、リンクリストの長さを格納できます)。
ヘッドポインタには表示機能があるため、リンクリストの名前を示すためにヘッドポインタがよく使用されます。 ヘッドノードでは、最初のノードの前に最初のポイントを挿入および削除すると、操作が他のノードと統合されます。
リンクリストが空であるかどうかに関係なく、ヘッドポインタは空ではありません。 ヘッドポインタはリンクリストの必須要素です。ヘッドノードは必ずしもリンクリストの必須要素ではありません。

最終要約:

  1. リンクリストノードには、データドメインとポインタドメインが含まれます
  2. リンクリストはn個のノードで構成され、最初のノードの格納場所はヘッドポインターと呼ばれ、最後のノードのポインターは「空」です。

シーケンステーブルと比較した利点:

  • 定義するときに長さを指定する必要はありません。
  • 保存される要素の数に制限はありません。
  • 要素を挿入および削除するときに、他の要素を移動する必要はありません。

さて、ここで見ると。私たちは古いルールを開始し、さようならを言う準備をしています。
今回はリンクリストの知識をみんなに広めます。次の記事では、「リンクリスト」の長男である「シングルリンクリスト」を紹介します。
この記事がお役に立てば幸いです親指を立ててください。助けてください〜
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_43776724/article/details/105234248