一:順序表的特點是邏輯上相鄰的資料元素,物理儲存位置也相鄰,並且,順序表的儲存空間需要預先分配。
它的優點是:
(1)方法簡單,各種高階語言中都有陣列,容易實現。
(2)不用為表示節點間的邏輯關係而增加額外的儲存開銷。
(3)順序表具有按元素序號隨機訪問的特點。
缺點:(1)在順序表中做插入、刪除操作時,平均移動表中的一半元素,因此對n較大的順序表效率低。
(2)需要預先分配足夠大的儲存空間,估計過大,可能會導致順序表後部大量閒置;預先分配過小,又會造成溢位。
二、在鍊錶中邏輯上相鄰的資料元素,物理儲存位置不一定相鄰,它使用指標實現元素之間的邏輯關係。並且,鍊錶的儲存空間是動態分配的。
鍊錶的最大特點是:
插入、刪除運算方便。
缺點:(1)要占用額外的儲存空間儲存元素之間的關係,儲存密度降低。儲存密度是指乙個節點中資料元素所佔的儲存單元和整個節點所佔的儲存單元之比。
(2)鍊錶不是一種隨機儲存結構,不能隨機訪問元素。
三、順序表與鍊錶的優缺點切好相反,那麼在實踐應用中怎樣選取儲存結構呢?通常有以下幾點考慮:
(1)順序表的儲存空間是靜態分配的,在程式執行之前必須明確規定它的儲存規模,也就是說事先對「maxsize」要有合適的設定,設定過大會造成儲存空間的浪費,過小造成溢位。因此,當對線性表的長度或儲存規模難以估計時,不宜採用順序表。然而,鍊錶的動態分配則可以克服這個缺點。鍊錶不需要預留儲存空間,也不需要知道表長如何變化,只要記憶體空間尚有空閒,就可以再程式執行時隨時地動態分配空間,不需要時還可以動態**。因此,當線性表的長度變化較大或者難以估計其儲存規模時,宜採用動態鍊錶作為儲存結構。
但在鍊錶中,除資料域外海需要在每個節點上附加指標。如果節點的資料佔據的空間小,則鍊錶的結構性開銷就占去了整個儲存空間的大部分。當順序表被填滿時,則沒有結構開銷。在這種情況下,順序表的空間效率更高。由於設定指標域額外地開銷了一定的儲存空間,從儲存密度的角度來講,鍊錶的儲存密度小於1.因此,當線性表的長度變化不大而且事先容易確定其大小時,為節省儲存空間,則採用順序表作為儲存結構比較適宜。
(2)基於運算的考慮(時間)
順序儲存是一種隨機訪問的結構,而鍊錶則是一種順序訪問結構,因此它們對各種操作有完全不同的演算法和時間複雜度。例如,要查詢線性表中的第i個元素,對於順序表可以直接計算出a(i)的的位址,不用去查詢,其時間複雜度為0(1).而鍊錶必須從煉表頭開始,依次向後查詢,平均需要0(n)的時間。所以,如果經常做的運算是按序號訪問資料元素,顯然順表優於鍊錶。
反之,在順序表中做插入,刪除時平均移動表中一半的元素,當資料元素的資訊量較大而且表比較長時,這一點是不應忽視的;在鍊錶中作插入、刪除,雖然要找插入位置,但操作是比較操作,從這個角度考慮顯然後者優於前者。
(3)基於環境的考慮(語言)
順序表容易實現,任何高階語言中都有陣列型別;鍊錶的操作是基於指標的。相對來講前者簡單些,也使用者考慮的乙個因素。
總之,兩種儲存結構各有長短,選擇哪一種由實際問題中的主要因素決定。通常「較穩定」的線性表,即主要操作是查詢操作的線性表,適於選擇順序儲存;而頻繁做插入刪除運算的(即動態性比較強)的線性表適宜選擇鏈式儲存。
線性表順序儲存和鏈式儲存比較
儲存密度 是指乙個節點中資料元素所佔的儲存單元和整個節點所佔的儲存單元之比。1 相鄰資料元素的存放位址也相鄰 邏輯與物理統一 2 要求記憶體中可用的儲存單元的位址必須是連續的。優點 1 儲存密度大 1 儲存空間利用率高。2 方法簡單,各種高階語言中都有陣列,容易實現。3 不用為表示節點間的邏輯關係而...
比較順序儲存結構和鏈式儲存結構的優缺點
順序儲存時,相鄰資料元素的存放位址也相鄰 邏輯與物理統一 要求記憶體中可用儲存單元的位址必須是連續的。優點 儲存密度大 1?儲存空間利用率高。缺點 插入或刪除元素時不方便。鏈式儲存時,相鄰資料元素可隨意存放,但所佔儲存空間分兩部分,一部分存放結點值,另一部分存放表示結點間關係的指標 優點 插入或刪除...
棧順序儲存 鏈式儲存
1.棧的順序儲存之動態儲存 include include define ok 1 define false 0 define true 1 define stack init size 20 儲存空間初始分配量 define stackincrement 5 儲存空間分配增量 typedef in...