【線性表】順序表與鏈表的綜合比較

<-----------------------------------西北大學mooc摘要------------------------------------->
1.基於空間的考慮
順序表的存儲空間是靜態分配的,在程序執行之前必須明確規定它的存儲規模。若線性表的長度 n 變化較大,則存儲規模難於預先確定。估計過大將造成空間浪費,估計太小又將使空間溢出的機會增多。
在靜態鏈表中,初始存儲池雖然也是靜態分配的,但若同時存在若干個結點類型相同的鏈表,則它們可以共享空間,使各鏈表之間能夠相互調節餘缺,減少溢出機會。動態鏈表的存儲空間是動態分配的,只要內存空間尚有空閒,就不會產生溢出。
因此,當線性表的長度變化較大,難以估計其存儲規模時,採用動態鏈表作爲存儲結構較好。

存儲密度(Storage Density)是指結點數據本身所佔的存儲量和整個結點結構所佔的存儲量之比,即:存儲密度=結點數據本身所佔的存儲量/結點結構所佔的存儲總量鏈表中的每個結點,除了數據域外,還要額外設置指針(或遊標)域,從存儲密度來講,這是不經濟的。

一般地,存儲密度越大,存儲空間的利用率就高。顯然,順序表的存儲密度
爲 1,而鏈表的存儲密度小於 1。例如單鏈表的結點的數據均爲整數,指針所佔空間和整型量相同,則單鏈表的存儲密度爲 50%。因此若不考慮順序表的備用結點空間,則順序表的存儲空間利用率爲 100%,而單鏈表的存儲空間利用率爲50%。由此可知,當線性表的長度變化不大,易於事先確定其大小時,爲了節約存儲空間,宜採用順序表作爲存儲結構。

2.基於時間的考慮
順序表是由向量實現的,它是一種隨機存取結構,對錶中任一結點都可以在
O (1) 時間內直接地存取,而鏈表中的結點,需從頭指針起順着鏈找才能取得。因此,若線性表的操作主要是進行查找,很少做插入和刪除時,宜採用順序表做存儲結構。
在鏈表中的任何位置上進行插入和刪除,都只需要修改指針。而在順序表中
進行插入和刪除,平均要移動表中近一半的結點,尤其是當每個結點的信息量較大時,移動結點的時間開銷就相當可觀。因此,對於頻繁進行插入和刪除的線性表,宜採用鏈表做存儲結構。若表的插入和刪除主要發生在表的首尾兩端,則宜採用尾指針表示的單循環鏈表。

3.基於語言的考慮
在沒有提供指針類型的高級語言環鏡中,若要採用鏈表結構,則可以使用光
標實現的靜態鏈表。雖然靜態鏈表在存儲分配上有不足之處,但它是和動態鏈表一樣,具有插入和刪除方便的特點。
值得指出的是,即使是對那些具有指針類型的語言,靜態鏈表也有其用武之
地。特別是當線性表的長度不變,僅需改變結點之間的相對關係時,靜態鏈表比動態鏈表可能更方便。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章