图Graph
存儲結構:
1、鄰接矩陣存儲
typedef struct
{
char vex[MAXVEX];//頂點數
int arc[MAXVEX][MAXVEX];//鄰接矩陣
int numVextexes,numEdges;//頂點數和邊數
}MGraph;
邊數相對節點較少時會浪費內存,因此可以使用鏈表實現
2、鄰接表
此為邊表
typedef struct EdgeNode
{
int adjvex;//存儲頂點對應的下標
int weight;
struct EdgeNode* next;//指向下一個鄰接點
}EdgeNode;
此為頂點表
typedef struct VertexNode
{
int data;//存儲頂點信息
EdgeNode *firstedge;//指向第一個以該頂點為頂點的弧結點
}VertexNode[MAXVEX];
此為圖表
typedef struct
{
VertexNode adjList;//頂點表節點
int numVertex,numEdges;//頂點數和邊數
}GraphAdjList;
鄰接鏈表和逆鄰接鏈表可以分別解決出度和入度的問題,但是不能同時考慮,因此引入十字鏈表。
3、十字鏈表 (有向圖)
頂點表結構為: data firstin firstout
邊表結構為:tailvex headvex hlink tlink info
firstin,firstout:分別指向以該節點為弧頭和弧尾的弧結點
tailvex:弧尾 headvex:弧頭 hlink:指向弧頭相同的下一條邊 tlink:指向弧尾相同的下一條邊
首先將頂點結點和所有的弧結點全部寫出,然后分別將指針指向相應的弧。
注意,此處所有的指針都是指向弧的,與之前的相同。
總結
- 上一篇: octomap的简介
- 下一篇: AutoFac注册的动态实例 Named