- 鄰接矩陣, 多用於稠密圖,記錄每兩個頂點之間邊的信息。空間複雜度是O(|V|2);通常實際問題稠密圖情況很少。
- 鄰接表, 是表示圖的標準方法,尤其對於稀疏圖節省很多存儲空間,空間複雜度是O(|E|+|V|). 對於每個頂點,使用一個表存放所有鄰接的頂點。
{
adjVertexNode* next;
}
struct VertexNode
{
char* data;//以結點存儲的信息爲字符爲例。
adjVertexNode* list; //鄰接點鏈表。
}
一個圖結構便可以由結點數組組成。考慮到數組不能用變量聲明大小。所以預先給定一個足夠大的數組。當然也可以用vector,List實現,那是後話了。同時圖必須要包含頂點數量信息。
struct Graph
{
VertexNode VertexNode[MAX_VERTEX_NUM];
int vertexNum;
}
以上,是我們嘗試構建一個圖的存儲結構必須,也是一定應該會想到的信息。
{
char* data;
adjVertexNode* next;
}
而恰恰這是最容易出現的錯誤寫法!!!事實上這個數據信息已在頂點VertexNode結構體中體現了,完全沒有必要這樣重複寫出來。
{
int adjVertexPosition;
adjVertexNode* next;
}
{
char* data;//以結點存儲的信息爲字符爲例。
adjVertexNode* list; //鄰接點鏈表。
int indegree;
}
struct adjVertexNode
{
int adjVertexPosition;
adjVertexNode* next;
}
struct VertexNode
{
char* data;//以結點存儲的信息爲字符爲例。
adjVertexNode* list; //鄰接點鏈表。
int indegree;
}
struct Graph
{
VertexNode VertexNode[MAX_VERTEX_NUM];
int vertexNum;
}
還有一些其他信息,比如邊上的權值(可以存儲在adjVertexNode中),圖的邊數,類型(可以存儲在Graph中),這裏沒有添加,主要是避免混淆。當真正理解每個元素信息爲什麼需要時再做擴展。