如何判斷鏈表有環(huán) 雙向鏈表有何作用?
雙向鏈表有何作用?同意chiconysun。鏈表的優(yōu)點(diǎn):插入和刪除元素的速度快;雙向:可以使鏈表的向前或向后遍歷更加方便。單向鏈表和雙向鏈表的區(qū)別?單向鏈表:?jiǎn)蜗蜴湵戆瑑蓚€(gè)字段,一個(gè)是信息字段,另一
雙向鏈表有何作用?
同意chiconysun。
鏈表的優(yōu)點(diǎn):插入和刪除元素的速度快;
雙向:可以使鏈表的向前或向后遍歷更加方便。
單向鏈表和雙向鏈表的區(qū)別?
單向鏈表:?jiǎn)蜗蜴湵戆瑑蓚€(gè)字段,一個(gè)是信息字段,另一個(gè)是指針字段。也就是說(shuō),單向鏈表的節(jié)點(diǎn)分為兩部分,一部分是保存或顯示該節(jié)點(diǎn)的信息,第二部分存儲(chǔ)下一個(gè)節(jié)點(diǎn)的地址,最后一個(gè)節(jié)點(diǎn)指向空值。優(yōu)點(diǎn):在單向鏈表中添加和刪除節(jié)點(diǎn)比較簡(jiǎn)單。遍歷時(shí)沒(méi)有死循環(huán)。(雙向不會(huì)循環(huán),循環(huán)列表忘記控制,很容易進(jìn)入循環(huán));缺點(diǎn):只能自始至終遍歷。我們只能找到接班人,不能找到先行者,也就是說(shuō),我們只能前進(jìn)。雙向鏈表:每個(gè)節(jié)點(diǎn)有2個(gè)鏈接,一個(gè)是前一個(gè)節(jié)點(diǎn)(當(dāng)這個(gè)鏈接是第一個(gè)鏈接時(shí),指向空值或空列表),另一個(gè)是后一個(gè)節(jié)點(diǎn)(當(dāng)這個(gè)鏈接是最后一個(gè)鏈接時(shí),指向空值或空列表)。也就是說(shuō),雙向鏈表有兩個(gè)指針,一個(gè)是指向上一個(gè)節(jié)點(diǎn)的指針,另一個(gè)是指向下一個(gè)節(jié)點(diǎn)的指針。優(yōu)點(diǎn):可以找到前驅(qū)和后繼,可以進(jìn)退;缺點(diǎn):添加刪除節(jié)點(diǎn)復(fù)雜。
與單鏈表相比,雙向循環(huán)鏈表有哪些優(yōu)點(diǎn)?
單鏈表缺少2113點(diǎn),只能向前移動(dòng),沒(méi)有5261就不能向后移動(dòng)。雖然有循環(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)。訪問(wèn)方式:?jiǎn)捂湵恚喝绻L問(wèn)任何節(jié)點(diǎn),只能從頭到尾訪問(wèn)。單循環(huán)鏈表:您可以從任何節(jié)點(diǎn)開(kāi)始,并從末端訪問(wèn)到任何節(jié)點(diǎn)。雙向鏈表:您可以從任何節(jié)點(diǎn)開(kāi)始,并從頭到尾訪問(wè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)開(kāi)始,每次都訪問(wèn)下一個(gè)節(jié)點(diǎn),直到到達(dá)所需位置。您還可以預(yù)先保存節(jié)點(diǎn)的位置并直接訪問(wè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è)鏈表訪問(wèn)上一個(gè)節(jié)點(diǎn)。通常在需要大量數(shù)據(jù)來(lái)存儲(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)開(kāi)始,然后沿著列表的任何方向進(jìn)行操作,直到返回到起始節(jié)點(diǎn)。循環(huán)鏈表可視為“無(wú)頭無(wú)尾”。循環(huán)列表中第一個(gè)節(jié)點(diǎn)之前是最后一個(gè)節(jié)點(diǎn),反之亦然。循環(huán)鏈表的無(wú)限性使得在這種鏈表上設(shè)計(jì)算法比普通鏈表更容易。對(duì)于新增加的節(jié)點(diǎn),無(wú)論是在第一個(gè)節(jié)點(diǎn)之前還是在最后一個(gè)節(jié)點(diǎn)之后,都可以根據(jù)實(shí)際需要靈活處理。此外,還有一個(gè)模擬的循環(huán)列表,即在訪問(wèn)最后一個(gè)節(jié)點(diǎn)后,手動(dòng)跳轉(zhuǎn)到第一個(gè)節(jié)點(diǎn)。在訪問(wèn)第一個(gè)節(jié)點(diǎn)之前也是如此。這還可以實(shí)現(xiàn)循環(huán)列表的功能,當(dāng)直接使用循環(huán)列表有困難或可能出現(xiàn)問(wèn)題時(shí),可以使用循環(huán)列表。