數(shù)據(jù)結(jié)構(gòu)雙向循環(huán)鏈表 與單鏈表相比,雙向循環(huán)鏈表有哪些優(yōu)點(diǎn)?
與單鏈表相比,雙向循環(huán)鏈表有哪些優(yōu)點(diǎn)?單鏈表缺少2113點(diǎn),只能向前走,沒有5261點(diǎn)就不能向后走。雖然有循環(huán)單鏈表,但4102的成本仍然很高,為1653。它需要跑一圈。這時(shí),雙向列表應(yīng)運(yùn)而生,再加上
與單鏈表相比,雙向循環(huán)鏈表有哪些優(yōu)點(diǎn)?
單鏈表缺少2113點(diǎn),只能向前走,沒有5261點(diǎn)就不能向后走。雖然有循環(huán)單鏈表,但4102的成本仍然很高,為1653。它需要跑一圈。這時(shí),雙向列表應(yīng)運(yùn)而生,再加上循環(huán),也就是雙向循環(huán)列表就更好了。所謂雙向鏈表,就是在前導(dǎo)節(jié)點(diǎn)上加一個(gè)指針,雙向循環(huán)鏈表把最后一個(gè)節(jié)點(diǎn)的后繼指針指向頭節(jié)點(diǎn)。訪問方式:?jiǎn)捂湵恚喝绻L問任何節(jié)點(diǎn),只能從頭到尾訪問。單循環(huán)鏈表:您可以從任何節(jié)點(diǎn)開始,并從末端訪問到任何節(jié)點(diǎn)。雙向鏈表:您可以從任何節(jié)點(diǎn)開始,并從頭到尾訪問它。單鏈表和單循環(huán)鏈表:只能在當(dāng)前節(jié)點(diǎn)之后插入和刪除雙鏈表:可以在當(dāng)前節(jié)點(diǎn)之前或之后插入,可以刪除之前和之后(包括節(jié)點(diǎn)本身)的存儲(chǔ):?jiǎn)捂湵砗蛦窝h(huán)鏈表的存儲(chǔ)密度較高比雙鏈表!單向鏈表或單鏈表定向鏈表,它包含兩個(gè)字段,一個(gè)信息字段和一個(gè)指針字段。此鏈接指向表中的下一個(gè)節(jié)點(diǎn),最后一個(gè)節(jié)點(diǎn)指向空值。單向鏈表只能在一個(gè)方向上遍歷。搜索節(jié)點(diǎn)時(shí),需要從第一個(gè)節(jié)點(diǎn)開始,每次都訪問下一個(gè)節(jié)點(diǎn),直到到達(dá)所需位置。您還可以預(yù)先保存節(jié)點(diǎn)的位置并直接訪問它。雙向鏈表又稱雙鏈表,它不僅有一個(gè)指向下一個(gè)節(jié)點(diǎn)的指針,而且還有一個(gè)指向上一個(gè)節(jié)點(diǎn)的指針。第一個(gè)節(jié)點(diǎn)的“前連接”指向null,最后一個(gè)節(jié)點(diǎn)的“后連接”指向null。這樣,就可以從任何節(jié)點(diǎn)、下一個(gè)節(jié)點(diǎn)甚至整個(gè)鏈表訪問上一個(gè)節(jié)點(diǎn)。通常在需要大量數(shù)據(jù)來存儲(chǔ)數(shù)據(jù)在鏈表中的位置時(shí)使用。因?yàn)橹赶蜴湵韮?nèi)容的指針被存儲(chǔ),并且相鄰的節(jié)點(diǎn)可以被修改,所以有時(shí)第一個(gè)節(jié)點(diǎn)可以被刪除,或者在第一個(gè)節(jié)點(diǎn)之前添加一個(gè)新節(jié)點(diǎn)。此時(shí),需要修改指向第一個(gè)節(jié)點(diǎn)的指針。消除這種特殊情況的一種方便方法是存儲(chǔ)一個(gè)虛擬節(jié)點(diǎn),該節(jié)點(diǎn)永遠(yuǎn)不會(huì)在最后一個(gè)節(jié)點(diǎn)之后和第一個(gè)節(jié)點(diǎn)之前被刪除或移動(dòng),從而形成一個(gè)循環(huán)列表。虛擬節(jié)點(diǎn)之后的節(jié)點(diǎn)是真正的第一個(gè)節(jié)點(diǎn)。在這種情況下,可以使用虛擬節(jié)點(diǎn)直接表示鏈表。循環(huán)列表在循環(huán)列表中,第一個(gè)節(jié)點(diǎn)和最后一個(gè)節(jié)點(diǎn)連接在一起。這種方法可以在單向鏈表和雙向鏈表中實(shí)現(xiàn)。要轉(zhuǎn)換循環(huán)列表,可以從任何節(jié)點(diǎn)開始,然后沿著列表的任何方向進(jìn)行操作,直到返回到起始節(jié)點(diǎn)。循環(huán)鏈表可視為“無頭無尾”。循環(huán)列表中第一個(gè)節(jié)點(diǎn)之前是最后一個(gè)節(jié)點(diǎn),反之亦然。循環(huán)鏈表的無限性使得在這種鏈表上設(shè)計(jì)算法比普通鏈表更容易。對(duì)于新增加的節(jié)點(diǎn),無論是在第一個(gè)節(jié)點(diǎn)之前還是在最后一個(gè)節(jié)點(diǎn)之后,都可以根據(jù)實(shí)際需要靈活處理。此外,還有一個(gè)模擬的循環(huán)列表,即在訪問最后一個(gè)節(jié)點(diǎn)后,手動(dòng)跳轉(zhuǎn)到第一個(gè)節(jié)點(diǎn)。在訪問第一個(gè)節(jié)點(diǎn)之前也是如此。這還可以實(shí)現(xiàn)循環(huán)列表的功能,當(dāng)直接使用循環(huán)列表有困難或可能出現(xiàn)問題時(shí),可以使用循環(huán)列表。
循環(huán)鏈表和雙向鏈表的區(qū)別是是什么?
訪問模式:?jiǎn)捂湵恚喝绻L問任何節(jié)點(diǎn),只能從頭到尾訪問。單循環(huán)鏈表:可以從任意節(jié)點(diǎn)開始并從末端訪問到任意節(jié)點(diǎn)雙向鏈表:可以從任意節(jié)點(diǎn)開始,任意向前向后雙向訪問操作:?jiǎn)窝h(huán)鏈表和單循環(huán)鏈表:只能在當(dāng)前節(jié)點(diǎn)之后插入和刪除雙循環(huán)鏈表:可以在前面插入在當(dāng)前節(jié)點(diǎn)的或后面,可以刪除前向和后向(包括節(jié)點(diǎn)自身)存儲(chǔ):?jiǎn)捂湵砗蛦窝h(huán)鏈表的存儲(chǔ)密度大于雙鏈表的存儲(chǔ)密度
不,是線性結(jié)構(gòu)。
線性結(jié)構(gòu)是指數(shù)據(jù)元素之間具有“一對(duì)一”線性關(guān)系的數(shù)據(jù)結(jié)構(gòu),其中只有一個(gè)根節(jié)點(diǎn),如循環(huán)鏈表和雙向鏈表;非線性結(jié)構(gòu)是指數(shù)據(jù)元素之間具有“一對(duì)多”非線性關(guān)系的數(shù)據(jù)結(jié)構(gòu),其中可以有一個(gè)根節(jié)點(diǎn),例如樹結(jié)構(gòu),或者多個(gè)根節(jié)點(diǎn),例如網(wǎng)絡(luò)。