単純なエントリ隣接リスト

隣接リストを学ぶ初心者は、隣接リスト、特にそのデータ構造の部分を覚えるのが難しいことに気付くでしょう。簡単に隣接リストを紹介しましょう。

1.一般的な理解

最初に、有向グラフとその隣接リストが示されます。
ここに画像の説明を挿入します

そのデータ構造の表現を与える

//  边表的结构 
typedef struct ArcNode
{
    
    
//  存储该顶点对应的下标 
  int adjvex;
//  指向的下一跳指针
  struct ArcNode *nextarc; 
}ArcNode;

//  顶点表 
typedef struct
{
    
    
  // 顶点信息 
  int data;
//  指向的第一条边的指针 
  ArcNode *firstArc; 
}VNode;

//  顶点表和边表组成邻接表
typedef struct
{
    
    
//  邻接表 
  VNode adjlist[maxSize];
//  顶点数和边数 
  int n,e; 
}AGraph;

2.内訳を見てください

データ構造は比較的複雑で、覚えにくく、初心者にはわかりにくいことがわかります。以下で構造
ここに画像の説明を挿入します
詳しく分析してみましょう。上の図は隣接リストの図です。
赤い楕円はデータ構造の頂点テーブルであり、有向グラフまたは無向グラフの頂点viを表します

赤い長方形の部分はエッジテーブルであり、2つの頂点の間に存在するエッジ間の関係を表します。つまり、2つのポイントはエッジによって相互に接続されています。たとえば、v0は3を指し(3は頂点テーブルに添え字3がある要素を意味し、頂点テーブルは配列です。これについては後で説明します)、頂点テーブルの3はv3を表します(上の配列添え字に注意してください)。左、配列が垂直に配置されている場所Of

最後に、これら2つのテーブルによって形成される最も外側の青い境界線は、隣接テーブルと呼ばれます

このとき、以下のデータ構造のコードを確認し、以下を再理解することができます。

3.もう少し

それぞれの小さなデータ構造の意味を見てみましょう

エッジテーブルの構造エッジテーブル
ここに画像の説明を挿入します
構造では、adjvexは頂点の添え字を表します(頂点テーブルは配列によって実装されると言いましたが、これについては後で説明します)。

そして* nextarcは、次の頂点へのポインタです。これは、図の黒い矢印です。

エッジテーブルの最終結果は通常ArcNodeという名前で、Arcはアークであり、エッジの意味です(もちろん、名前は任意です)

頂点テーブル構造
ここに画像の説明を挿入します
データは、有向グラフまたは無向グラフの頂点を表します。

* firstArcは、データ構造内で頂点が指す最初のエッジを表します

最後に、VNodeのvは頂点の略語です。

隣接リストの構造
ここに画像の説明を挿入します

最後に、adjlist(adjは隣接、つまり隣接、隣接)であることがわかります。これは頂点配列であり、隣接リスト(AGraph)から頂点配列を見つけ、* firstArcから任意の頂点にアクセスできます。頂点配列の(つまり、グラフ全体をトラバースします)。

上記は、隣接リストのデータ構造の簡単な紹介です。

おすすめ

転載: blog.csdn.net/qq_34902437/article/details/101613170