順序存儲結構與鏈式存儲結構的比較(也可以說的順序表與鏈表的比較)

1、鏈式存儲結構存儲空間在邏輯上是連續的,但是在物理上是離散的;而順序存儲結構存儲空間在邏輯上是連續的,在物理上也是連續的。

2、鏈式存儲存儲密度小,但空間利用率較高;順序存儲存儲密度大,但空間利用率較低。

3、順序結構優點是可以隨機讀取元素,缺點是插入和刪除元素要移動大量元素,它的存儲空間固定,可擴展性差;對鏈式存儲而言,插入和刪除元素開銷小,操作簡便。可擴展性強。缺點是不適合查找。

(綜上所述,如果元素個數已知,且插入刪除較少的可以使用順序結構,而對於頻繁有插入刪除操作,元素個數未知的,最好使用鏈式結構,編程時可結合要處理的數據的特點設計數據結構的。)

以上爲我個人總結。

以下轉自http://www.cnblogs.com/super-d2/archive/2012/08/10/2632064.html

一:順序表的特點是邏輯上相鄰的數據元素,物理存儲位置也相鄰,並且,順序表的存儲空間需要預先分配。

它的優點是:

  (1)方法簡單,各種高級語言中都有數組,容易實現。

  (2)不用爲表示節點間的邏輯關係而增加額外的存儲開銷。

  (3)順序表具有按元素序號隨機訪問的特點。

缺點:

  (1)在順序表中做插入、刪除操作時,平均移動表中的一半元素,因此對n較大的順序表效率低。

  (2)需要預先分配足夠大的存儲空間,估計過大,可能會導致順序表後部大量閒置;預先分配過小,又會造成溢出。

二、在鏈表中邏輯上相鄰的數據元素,物理存儲位置不一定相鄰,它使用指針實現元素之間的邏輯關係。並且,鏈表的存儲空間是動態分配的。

鏈表的最大特點是:

  插入、刪除運算方便。

缺點:

  (1)要佔用額外的存儲空間存儲元素之間的關係,存儲密度降低。存儲密度是指一個節點中數據元素所佔的存儲單元和整個節點所佔的存儲單元之比。

  (2)鏈表不是一種隨機存儲結構,不能隨機存取元素。

三、順序表與鏈表的優缺點切好相反,那麼在實踐應用中怎樣選取存儲結構呢?通常有以下幾點考慮:

  (1)順序表的存儲空間是靜態分配的,在程序執行之前必須明確規定它的存儲規模,也就是說事先對“MaxSize”要有合適的設定,設定過大會造成存儲空間的浪費,過小造成溢出。因此,當對線性表的長度或存儲規模難以估計時,不宜採用順序表。然而,鏈表的動態分配則可以克服這個缺點。鏈表不需要預留存儲空間,也不需要知道表長如何變化,只要內存空間尚有空閒,就可以再程序運行時隨時地動態分配空間,不需要時還可以動態回收。因此,當線性表的長度變化較大或者難以估計其存儲規模時,宜採用動態鏈表作爲存儲結構。

  但在鏈表中,除數據域外海需要在每個節點上附加指針。如果節點的數據佔據的空間小,則鏈表的結構性開銷就佔去了整個存儲空間的大部分。當順序表被填滿時,則沒有結構開銷。在這種情況下,順序表的空間效率更高。由於設置指針域額外地開銷了一定的存儲空間,從存儲密度的角度來講,鏈表的存儲密度小於1.因此,當線性表的長度變化不大而且事先容易確定其大小時,爲節省存儲空間,則採用順序表作爲存儲結構比較適宜。

  (2)基於運算的考慮(時間)

  順序存儲是一種隨機存取的結構,而鏈表則是一種順序存取結構,因此它們對各種操作有完全不同的算法和時間複雜度。例如,要查找線性表中的第i個元素,對於順序表可以直接計算出a(i)的的地址,不用去查找,其時間複雜度爲0(1).而鏈表必須從鏈表頭開始,依次向後查找,平均需要0(n)的時間。所以,如果經常做的運算是按序號訪問數據元素,顯然順表優於鏈表。

  反之,在順序表中做插入,刪除時平均移動表中一半的元素,當數據元素的信息量較大而且表比較長時,這一點是不應忽視的;在鏈表中作插入、刪除,雖然要找插入位置,但操作是比較操作,從這個角度考慮顯然後者優於前者。

  (3)基於環境的考慮(語言)

  順序表容易實現,任何高級語言中都有數組類型;鏈表的操作是基於指針的。相對來講前者簡單些,也用戶考慮的一個因素。

  總之,兩種存儲結構各有長短,選擇哪一種由實際問題中的主要因素決定。通常“較穩定”的線性表,即主要操作是查找操作的線性表,適於選擇順序存儲;而頻繁做插入刪除運算的(即動態性比較強)的線性表適宜選擇鏈式存儲。

 

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