鏈表和數組的區別在哪裡?

來源:互聯網
上載者:User

我一直有這樣的困惑:鏈表和數位區別在哪裡?數組是線性結構,可以直接索引,即要去第i個元素,a[i]即可。鏈表也是線性結構,要取第i個元素,只需用指標往後遍曆i次就可。貌似鏈表比數組還要麻煩些,而且效率低些。

想到這些相同處中的一些細微的不同處,於是他們的真正不同處漸漸顯現了:鏈表的效率為何比數組低些?先從兩者的初始化開始。數組無需初始化,因為數組的元素在記憶體的棧區,系統自動申請空間。而鏈表的結點元素在記憶體的堆區,每個元素須手動申請空間,如malloc。也就是說數組是靜態分配記憶體,而鏈表是動態分配記憶體。鏈表如此麻煩為何還要用鏈表呢?數組不能完全代替鏈表嗎?回到這個問題只需想想我們當初是怎麼完成學生資訊管理系統的。為何那時候要用鏈表?因為學生管理系統中的插入,刪除等操作都很靈活,而數組則大小固定,也無法靈活高效的插入,刪除。因為堆操作靈活性更強。數組每次插入一個元素就需要移動已有元素,而鏈表元素在堆上,無需這麼麻煩。

說了這麼多,數組和鏈表的區別整理如下:

數組靜態分配記憶體,鏈表動態分配記憶體;

數組在記憶體中連續,鏈表不連續;

數組元素在棧區,鏈表元素在堆區;

數組利用下標定位,時間複雜度為O(1),鏈表定位元素時間複雜度O(n);

數組插入或刪除元素的時間複雜度O(n),鏈表的時間複雜度O(1)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.