7.2图的存储结构(十字链表、邻接多重表、边集数组)
思路:
有沒有可能把鄰接表和逆鄰接表結(jié)合起來(lái)。
所以就產(chǎn)生了十字鏈表(Orthogonal List)
為此我們重新定義頂點(diǎn)表結(jié)點(diǎn)結(jié)構(gòu):
| data | firstIn | firstOut |
firstIn:第一個(gè)入邊
firstOut:第一個(gè)出邊
然后定義邊表結(jié)點(diǎn)結(jié)構(gòu)
| tailVex | headVex | headLink | tailLink |
tailVex:弧起點(diǎn)的頂點(diǎn)的下標(biāo)
headVex:弧終點(diǎn)的頂點(diǎn)的下標(biāo)
headLink:逆鄰接表
tailLink:鄰接表
如下圖所示:
十字鏈表結(jié)構(gòu)復(fù)制,其實(shí)創(chuàng)建圖算法的時(shí)間復(fù)雜度是和鄰接表相同的,因此,在有向圖中,十字鏈表是非常好的數(shù)據(jù)結(jié)構(gòu)模型。
鄰接多重表
如果要?jiǎng)h除鄰接表中的結(jié)點(diǎn),那么就要把結(jié)點(diǎn)刪除,然后把刪除結(jié)點(diǎn)的前后兩個(gè)結(jié)點(diǎn)連接起來(lái)。
所以比較復(fù)制。
對(duì)于這種情況,就產(chǎn)生了連接多重表。
重新定義邊表結(jié)構(gòu),如下:
| iVex | iLink | jVex | jLink |
也就是說(shuō)在鄰接多重表里面,邊表存放的是一條邊,而不是一個(gè)頂點(diǎn)。
如下圖所示:
邊集數(shù)組
由兩個(gè)一位數(shù)組構(gòu)成,一個(gè)是存儲(chǔ)頂點(diǎn)信息,一個(gè)存儲(chǔ)邊信息,這個(gè)邊數(shù)組每個(gè)數(shù)據(jù)元素由一個(gè)邊的起點(diǎn)下標(biāo)(begin)、終點(diǎn)下標(biāo)(end)和權(quán)(weight)組成。
如下圖:
總結(jié)
以上是生活随笔為你收集整理的7.2图的存储结构(十字链表、邻接多重表、边集数组)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机风格学,由风格学习算法自动生成大规
- 下一篇: 二叉排序树的删除操作