簡單入門鄰接表

初學鄰接表會覺得鄰接表很難記憶,尤其是其數據結構部分,下面我們簡單介紹一下鄰接表。

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

其中紅色矩形部分就是邊表,其表示兩個頂點之間存在的邊的關係,就是這兩個點通過一條邊連在了一起。如 v0 指向 3 (3 表示在頂點表中下標爲 3 的元素,頂點表是一個數組,後面講)而 3 在頂點表中代表 v3(關注左側的數組下標,這裏數組是豎着放的

最後,這兩個表組成的最外面的藍色邊框就稱爲鄰接表

這個時候你可以在回顧以下給出的數據結構的代碼,重新理解以下。

3. 再細一點

下面我們來看看每個小的數據結構各自的含義

邊表結構
在這裏插入圖片描述
在邊表的結構中,adjvex 表示的是頂點的下標(我們說過,頂點表是用數組實現的,後面會再講)

而 *nextarc 是指向下一個頂點的指針,就是圖中的那個黑色箭頭

最後這個邊表結果我們通常命名爲 ArcNode,Arc 就是弧,邊的意思(當然名字隨意取)

頂點表結構
在這裏插入圖片描述
data 代表的就是有向圖或者無向圖的頂點。

*firstArc 表示頂點在數據結構中指向的第一條邊

最後,VNode 中 v 是 vertex 頂點的縮寫。

鄰接表結構
在這裏插入圖片描述

最後,adjlist (adj 是 adjacent,表示毗鄰,鄰近的意思)我們看到是一個數組,這就是頂點數組,我們通過鄰接表(AGraph)找到頂點數組,通過頂點數組的 *firstArc 就可以訪問任何的頂點(即遍歷整個圖)了。

以上便是對鄰接表數據結構的簡單入門。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章