順序表和鏈表的區別及其優缺點


1.順序表存儲(典型的數組)
  原理:順序表存儲是將數據元素放到一塊連續的內存存儲空間,相鄰數據元素的存放地址也相鄰(邏輯與物理統一)。
  優點:

    (1)空間利用率高。(局部性原理,連續存放,命中率高) 
    (2)存取速度高效,通過下標來直接存儲。
     缺點:

      (1)插入和刪除比較慢,比如:插入或者刪除一個元素時,整個表需要遍歷移動元素來重新排一次順序。
              (2)不可以增長長度,有空間限制,當需要存取的元素個數可能多於順序表的元素個數時,會出現"溢出"問題.當元素個數遠少於預先分配的空間時,空間浪費巨大。  
     時間性能 :查找 O(1) ,插入和刪除O(n)。
2.鏈表存儲
    原理:鏈表存儲是在程序運行過程中動態的分配空間,只要存儲器還有空間,就不會發生存儲溢出問題,相鄰數據元素可隨意存放,但所占存儲空間分兩部分,一部分存放結點值,另一部分存放表示結點關系間的指針。
    優點:

     (1)存取某個元素速度慢。 
             (2)插入和刪除速度快,保留原有的物理順序,比如:插入或者刪除一個元素時,只需要改變指針指向即可。
             (3)沒有空間限制,存儲元素的個數無上限,基本只與內存空間大小有關. 
    缺點:

     (1)占用額外的空間以存儲指針(浪費空間,不連續存放,malloc開辟,空間碎片多) 
             (2)查找速度慢,因為查找時,需要循環鏈表訪問,需要從開始節點一個一個節點去查找元素訪問。
    時間性能 :查找 O(n) ,插入和刪除O(1)。 
*頻繁的查找卻很少的插入和刪除操作可以用順序表存儲,堆排序,二分查找適宜用順序表.
*如果頻繁的插入和刪除操作很少的查詢就可以使用鏈表存儲
*順序表適宜於做查找這樣的靜態操作;鏈表適宜於做插入、刪除這樣的動態操作。
*若線性表長度變化不大,如果事先知道線性表的大致長度,比如一年12月,一周就是星期一至星期日共七天,且其主要操作是查找,則采用順序表;若線性表長度變化較大或根本不知道多大時,且其主要操作是插入、刪除,則采用鏈表,這樣可以不需要考慮存儲空間的大小問題。


免責聲明!

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



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