一:順序表的特色是邏輯上相鄰的數據元素,物理存儲位置也相鄰,而且,順序表的存儲空間須要預先分配。web
它的優勢是:算法
(1)方法簡單,各類高級語言中都有數組,容易實現。數組
(2)不用爲表示節點間的邏輯關係而增長額外的存儲開銷。spa
(3)順序表具備按元素序號隨機訪問的特色。指針
缺點:orm
(1)在順序表中作插入、刪除操做時,平均移動表中的一半元素,所以對n較大的順序表效率低。內存
(2)須要預先分配足夠大的存儲空間,估計過大,可能會致使順序表後部大量閒置;預先分配太小,又會形成溢出。ci
2、在鏈表中邏輯上相鄰的數據元素,物理存儲位置不必定相鄰,它使用指針(引用)實現元素之間的邏輯關係。而且,鏈表的存儲空間是動態分配的。it
鏈表的最大特色是:form
插入、刪除運算方便。
缺點:
(1)要佔用額外的存儲空間存儲元素之間的關係,存儲密度下降。存儲密度是指一個節點中數據元素所佔的存儲單元和整個節點所佔的存儲單元之比。
(2)鏈表不是一種隨機存儲結構,不能隨機存取元素。
3、順序表與鏈表的優缺點切好相反,那麼在實踐應用中怎樣選取存儲結構呢?一般有如下幾點考慮:
(1)順序表的存儲空間是靜態分配的,在程序執行以前必須明確規定它的存儲規模,也就是說事先對「MaxSize」要有合適的設定,設定過大會形成存儲空間的浪費,太小形成溢出。所以,當對線性表的長度或存儲規模難以估計時,不宜採用順序表。然而,鏈表的動態分配則能夠克服這個缺點。鏈表不須要預留存儲空間,也不須要知道表長如何變化,只要內存空間尚有空閒,就能夠再程序運行時隨時地動態分配空間,不須要時還能夠動態回收。所以,當線性表的長度變化較大或者難以估計其存儲規模時,宜採用動態鏈表做爲存儲結構。
但在鏈表中,除數據域外海須要在每一個節點上附加指針。若是節點的數據佔據的空間小,則鏈表的結構性開銷就佔去了整個存儲空間的大部分。當順序表被填滿時,則沒有結構開銷。在這種狀況下,順序表的空間效率更高。因爲設置指針域額外地開銷了必定的存儲空間,從存儲密度的角度來說,鏈表的存儲密度小於1.所以,當線性表的長度變化不大並且事先容易肯定其大小時,爲節省存儲空間,則採用順序表做爲存儲結構比較適宜。
(2)基於運算的考慮(時間)
順序存儲是一種隨機存取的結構,而鏈表則是一種順序存取結構,所以它們對各類操做有徹底不一樣的算法和時間複雜度。例如,要查找線性表中的第i個元素,對於順序表能夠直接計算出a(i)的的地址,不用去查找,其時間複雜度爲0(1).而鏈表必須從鏈表頭開始,依次向後查找,平均須要0(n)的時間。因此,若是常常作的運算是按序號訪問數據元素,顯然順表優於鏈表。
反之,在順序表中作插入,刪除時平均移動表中一半的元素,當數據元素的信息量較大並且表比較長時,這一點是不該忽視的;在鏈表中做插入、刪除,雖然要找插入位置,但操做是比較操做,從這個角度考慮顯而後者優於前者。
(3)基於環境的考慮(語言)
順序表容易實現,任何高級語言中都有數組類型;鏈表的操做是基於指針的。相對來說前者簡單些,也用戶考慮的一個因素。
總之,兩種存儲結構各有長短,選擇哪種由實際問題中的主要因素決定。一般「較穩定」的線性表,即主要操做是查找操做的線性表,適於選擇順序存儲;而頻繁作插入刪除運算的(即動態性比較強)的線性表適宜選擇鏈式存儲。