隣接リストを学ぶ初心者は、隣接リスト、特にそのデータ構造の部分を覚えるのが難しいことに気付くでしょう。簡単に隣接リストを紹介しましょう。
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から任意の頂点にアクセスできます。頂点配列の(つまり、グラフ全体をトラバースします)。
上記は、隣接リストのデータ構造の簡単な紹介です。