順序表和鏈表的比較

1 順序表

順序表的優(yōu)點(diǎn):
(1) 方法簡(jiǎn)單,各種高級(jí)語言中都有數(shù)組,容易實(shí)現(xiàn)。
(2) 不用為表示結(jié)點(diǎn)間的邏輯關(guān)系而增加額外的存儲(chǔ)開銷。
(3) 順序表具有按元素序號(hào)隨機(jī)訪問的特點(diǎn)。
順序表的缺點(diǎn):
(1) 在順序表中做插入刪除操作時(shí),平均移動(dòng)大約表中一半的元素,因此對(duì)n較大的順序表效率低。
(2) 需要預(yù)先分配足夠大的存儲(chǔ)空間,估計(jì)過大,可能會(huì)導(dǎo)致順序表后部大量閑置;預(yù)先分配過小,又會(huì)造成溢出。

2 鏈表

鏈表的優(yōu)點(diǎn):
(1) 在鏈表中做插入刪除操作時(shí),不會(huì)影響前面和后面的節(jié)點(diǎn),因此對(duì)n較大的鏈表效率高。
(2) 不需要預(yù)先分配足夠大的存儲(chǔ)空間,避免造成空間閑置或溢出的情況。
鏈表的缺點(diǎn):
(1) 需要進(jìn)行指針操作,方法復(fù)雜。
(2) 需要為表示結(jié)點(diǎn)間的邏輯關(guān)系(指針變量)而增加額外的存儲(chǔ)開銷。
(3) 只能通過遍歷找到某個(gè)節(jié)點(diǎn),不能使用下標(biāo)直接定位節(jié)點(diǎn)。

3 選擇合適的數(shù)據(jù)結(jié)構(gòu)

1.基于存儲(chǔ)的考慮
順序表的存儲(chǔ)空間是靜態(tài)分配的,在程序執(zhí)行之前必須明確規(guī)定它的存儲(chǔ)規(guī)模,也就是說事先對(duì)"MAXSIZE"要有合適的設(shè)定,過大造成浪費(fèi),過小造成溢出??梢妼?duì)線性表的長(zhǎng)度或存儲(chǔ)規(guī)模難以估計(jì)時(shí),不宜采用順序表;鏈表不用事先估計(jì)存儲(chǔ)規(guī)模,但鏈表的存儲(chǔ)密度較低(存儲(chǔ)密度是指一個(gè)結(jié)點(diǎn)中數(shù)據(jù)元素所占的存儲(chǔ)單元和整個(gè)結(jié)點(diǎn)所占的存儲(chǔ)單元之比,顯然鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的存儲(chǔ)密度是小于1的)。
2.基于運(yùn)算的考慮
在順序表中按序號(hào)訪問 ai 的時(shí)間性能時(shí)O(1),而鏈表中按序號(hào)訪問的時(shí)間性能O(n),所以如果經(jīng)常做的運(yùn)算是按序號(hào)訪問數(shù)據(jù)元素,顯然順序表優(yōu)于鏈表;而在順序表中做插入、刪除時(shí)平均移動(dòng)表中一半的元素,當(dāng)數(shù)據(jù)元素的信息量較大且表較長(zhǎng)時(shí),這一點(diǎn)是不應(yīng)忽視的;在鏈表中作插入、刪除,雖然也要找插入位置,但操作主要是比較操作,從這個(gè)角度考慮顯然后者優(yōu)于前者。
3.基于環(huán)境的考慮
順序表容易實(shí)現(xiàn),任何高級(jí)語言中都有數(shù)組類型,鏈表的操作是基于指針的,相對(duì)來講前者簡(jiǎn)單些,也是用戶考慮的一個(gè)因素。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容