圖的存儲結構:
如果我們在無向圖的應用中,關注的重點是頂點的話,那么鄰接表是不錯的選擇,但是我們關注的是邊的操作,比如對已經訪問過的邊做標記,或者刪除某一條邊等操作,鄰接表就顯得不那么方便了。
圖解:
若要刪除(v0,v2)這條邊,就需要對鄰接表結構中邊表的兩個節點進行刪除操作。
相對操作比較麻煩!
因此,也仿照十字鏈表的方式,對邊表結構進行改裝,重新定義的邊表結構如下:
iVex |
iLink |
jVex |
jLink |
其中iVex和jVex是與某條邊依附的兩個頂點的頂點下標。iLink指向依附頂點iVex的下一條邊,jLink指向依附頂點jVex的下一條邊。
也就是說在鄰接多重表里邊,這表存放的是一條邊,而不是一個頂點。
上圖遵循:iVex和jVex是與某條邊依附的兩個頂點的頂點下標。iLink指向依附頂點iVex的下一條邊,jLink指向依附頂點jVex的下一條邊,而形成。
邊集數組:
邊集數組是由兩個一維數組構成,一個是存儲頂點的信息,另一個是存儲邊的信息,這個邊數組每個數據元素由一條邊的起點下標(begin),終點下標(end)和權(weight)組成。
圖解:
頂點數組 |
V0 |
V1 |
V2 |
V3 |
邊數組 |
Begin |
End |
Weight |
0 |
0 |
3 |
5 |
1 |
1 |
0 |
4 |
2 |
1 |
2 |
3 |
3 |
2 |
0 |
8 |