數據結構c語言——掌握 ”圖“你所必須掌握 ”圖“ 的存儲結構

1.鄰接矩陣存儲:

鄰接矩陣是表示頂點之間相鄰關係的矩陣。設G=(V,E)是具有n(n>0)個頂點的圖,頂點的編號依次爲0~n-1。
G的鄰接矩陣A是n階方陣,其定義如下:

1)如果G是無向圖,則:
      A[i][j]=1:若(i,j)∈E(G)   0:其他

 2)如果G是有向圖,則:
      A[i][j]=1:若<i,j>∈E(G)  0:其他

3)如果G是帶權無向圖,則:
     A[i][j]= wij :若i≠j且(i,j)∈E(G)  0:i=j  ∞:其他

4)如果G是帶權有向圖,則:
     A[i][j]= wij :若i≠j且<i,j>∈E(G)   0:i=j ∞:其他

在這裏插入圖片描述
圖的鄰接矩陣存儲類型定義如下:

#define  MAXV  <最大頂點個數>	
typedef struct //---------------------------聲明頂點的類型
{    int no;			//頂點編號
     InfoType info;		//頂點其他信息
} VertexType;
typedef struct  		//圖的定義---------------------------聲明的鄰接矩陣類型
{    int edges[MAXV][MAXV]; 	//鄰接矩陣
     int n,e;  		//頂點數,邊數
     VertexType vexs[MAXV];	//存放頂點信息
}  MatGraph;

鄰接表:

對圖中每個頂點i建立一個單鏈表,將頂點i的所有鄰接點鏈起來。
在這裏插入圖片描述
每個單鏈表上添加一個表頭結點(表示頂點信息)。並將所有表頭結點構成一個數組,下標爲i的元素表示頂點i的表頭結點
在這裏插入圖片描述
例如:
在這裏插入圖片描述
鄰接表的特點如下:
1、鄰接表表示不唯一。
在這裏插入圖片描述
2、特別適合於稀疏圖存儲。 -------------- 鄰接表的存儲空間爲O(n+e)。

圖的鄰接表存儲類型定義如下:

typedef struct ANode//------------------------聲明邊結點類型
{  int adjvex;			//該邊的終點編號
   struct ANode *nextarc;	//指向下一條邊的指針
   InfoType weight;		//該邊的權值等信息
}  ArcNode;

typedef struct Vnode//-----------------------------聲明鄰接表頭結點類型
{  VertexType data;		//頂點信息
   ArcNode *firstarc;		//指向第一條邊
}  VNode;

typedef struct //----------------------------聲明圖鄰接表類型
{  VNode adjlist[MAXV];	//鄰接表(有多少個頂點就有多少個元素)
   int n,e;			//圖中頂點數n和邊數e
} AdjGraph;

一個鄰接表通常用指針引用:
在這裏插入圖片描述
逆鄰接表: 就是在有向圖的鄰接表中,對每個頂點,鏈接的是指向該頂點的邊。
在這裏插入圖片描述

此次博客暫未寫完,暫代更新之中…

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