線性表可用順序表或鏈表存儲的優缺點


 

順序存儲表示是將數據元素存放於一個連續的存儲空間中,實現順序存取或(按下標)直接存取。它的存儲效率高,存取速度快。但它的空間大小一經定義,在程序整個運行期間不會發生改變,因此,不易擴充。同時,由於在插入或刪除時,為保持原有次序(沒有規定元素進棧順序),平均需要移動一半(或近一半)元素修改效率不高

鏈接存儲表示的存儲空間一般在程序的運行過程中動態分配和釋放,且只要存儲器中還有空間,就不會產生存儲溢出的問題。同時在插入和刪除時不需要保持數據元素原來的物理順序,只需要保持原來的邏輯順序,因此不必移動數據,只需修改它們的鏈接指針,修改效率較高。但存取表中的數據元素時,只能循鏈順序訪問,因此存取效率不高。

 

  1 順序表和鏈表的時間性能比較

所謂時間性能是指實現基於這種存儲結構的基本運算(即算法)的時間復雜度。

像取出線性表中第 i 個元素這樣的按位置隨機訪問的操作,使用順序表更快一些;取前趨和后繼結點的操作在順序表中可以很容易調整當前的位置向前或向后,因此這兩種操作的時間為 (1) ;相比之下,單鏈表不能直接訪問上述的元素,按位置訪問只能從表頭開始,直到找到那個特定的位置,所需要的平均時間為 ( n ) 。

給出指向鏈表中某個合適位置的指針后,插入和刪除操作所需的時間僅為 ( 1 ),而順序表進行插入和刪除操作需移動近乎表長一半的元素,需要的平均時間為 ( n ) 。這在線性表中元素個數較多時,特別是當每個元素占用的空間較多時,移動元素的時間開銷很大。對於許多應用,插入和刪除是最主要的操作,因此它們的時間效率是舉足輕重的,僅就這個原因而言,鏈表經常比順序表更好。

 

作為一般規律,若線性表需頻繁查找卻很少進行插入和刪除操作,或其操作和“數據元素在線性表中的位置”密切相關時,宜采用順序表作為存儲結構;若線性表需頻繁進行插入和刪除操作時,則宜采用鏈表做存儲結構。

    2 順序表和鏈表的空間性能比較

所謂空間性能是指這種存儲結構所占用的存儲空間的大小。

首先定義結點的 存儲密度

順序表中每個元素的存儲密度為 1 ,沒有浪費空間;而鏈表的每個結點除了存放數據元素,還要附加一個指示元素之間邏輯關系的指針,如果數據域占據的空間較小,則鏈表的結構性開銷就占去了整個存儲空間的大部分,因而從結點的存儲密度上講,順序表的存儲空間利用率較高。

由於順序表需要預分配一定長度的存儲空間,如果事先不能明確知道線性表的大致長度,則有可能對存儲空間預分配得過大,致使在程序執行過程中很大一部分的存儲空間得不到充分利用,而造成浪費;若估計得過小,又將造成頻繁地進行存儲空間的再分配。而鏈表的顯著優點之一就是其存儲分配的靈活性,不需要為鏈表預分配空間,只要有可用的內存空間分配,鏈表中的元素個數就沒有限制。

 

作為一般規律,當線性表中元素個數變化較大或者未知時,最好使用鏈表實現;而如果用戶事先知道線性表的大致長度,使用順序表的空間效率會更高。

 

總之,線性表的順序實現和鏈表實現各有其優缺點,不能籠統地說哪種實現更好,只能根據實際問題的具體需要,並對各方面的優缺點加以綜合平衡,才能最終選定比較適宜的實現方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM