鏈表和數組的區別

來源:互聯網
上載者:User

鏈表和數組一樣是一種資料結構。


數組是將元素在記憶體中連續存放,由於每個元素佔用記憶體相同,所以可以通過下標迅速訪問數組中任何元素。但是如果要在數組中增加一個元素,需要移動大量元素,在記憶體中空出一個元素的空間,然後將要增加的元素放在其中。同樣的道理,如果想刪除一個元素,同樣需要移動大量元素去填掉被移動的元素。


鏈表恰好相反,鏈表中的元素在記憶體中不是順序儲存的,而是通過存在元素中的指標聯絡到一起。如:上一個元素有個指標指到下一個元素,以此類推,直到最後一個元素。如果要訪問鏈表中一個元素,需要從第一個元素開始,一直找到需要的元素位置。但是增加和刪除一個元素對於鏈表資料結構就非常簡單了, 只要修改元素中的指標就可以了。


從上面的比較可以看出,如果需要快速存取資料,很少或不插入和刪除元素,就應該用數組;相反, 如果需要經常插入和刪除元素就需要用鏈表資料結構了。


C++語言中可以用數組處理一組資料類型相同的資料,但不允許動態定義數組的大小,即在使用數組之前必須確定數組的大小。而在實際應用中,使用者使用數組之前有時無法準確確定數組的大小,只能將數組定義成足夠大小,這樣數組中有些空間可能不被使用,從而造成記憶體空間的浪費。
  
 鏈表是一種常見的資料群組織形式,它採用動態分配記憶體的形式實現。需要時可以用new分配記憶體空間,不需要時用delete將已指派的空間釋放,不會造成記憶體空間的浪費。
  
  A 從邏輯結構來看
  
  A-1. 數組必須事先定義固定的長度(元素個數),不能適應資料動態地增減的情況。當資料增加時,可能超出原先定義的元素個數;當資料減少時,造成記憶體浪費。
  
  A-2. 鏈表動態地進行儲存分配,可以適應資料動態地增減的情況,且可以方便地插入、刪除資料項目。(數組中插入、刪除資料項目時,需要移動其它資料項目)
  
  
  B 從記憶體儲存來看
  
  B-1. (靜態)數組從棧中分配空間, 對於程式員方便快速,但是自由度小
  
  B-2. 鏈表從堆中分配空間, 自由度大但是申請管理比較麻煩.

  
  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.