【轉】數據結構:數組和鏈表的區別(數組和鏈表的優缺點 & 數組和鏈表的適用場景)

數組和鏈表是兩種基本的數據結構,他們在內存存儲上的表現不一樣,所以也有各自的特點

數組

一、數組的特點

1.在內存中,數組是一塊連續的區域 
2.數組需要預留空間

在使用前需要提前申請所佔內存的大小,這樣不知道需要多大的空間,就預先申請可能會浪費內存空間,即數組空間利用率低 
ps:數組的空間在編譯階段就需要進行確定,所以需要提前給出數組空間的大小(在運行階段是不允許改變的)

3.在數組起始位置處,插入數據和刪除數據效率低。

插入數據時,待插入位置的的元素和它後面的所有元素都需要向後搬移 
刪除數據時,待刪除位置後面的所有元素都需要向前搬移

4.隨機訪問效率很高,時間複雜度可以達到O(1)

因爲數組的內存是連續的,想要訪問那個元素,直接從數組的首地址處向後偏移就可以訪問到了

5.數組開闢的空間,在不夠使用的時候需要擴容,擴容的話,就會涉及到需要把舊數組中的所有元素向新數組中搬移 
6.數組的空間是從棧分配的

二、數組的優點

隨機訪問性強,查找速度快,時間複雜度爲O(1)

三、數組的缺點

1.頭插和頭刪的效率低,時間複雜度爲O(N) 
2.空間利用率不高 
3.內存空間要求高,必須有足夠的連續的內存空間 
4.數組空間的大小固定,不能動態拓展
 

鏈表

一、鏈表的特點

1.在內存中,元素的空間可以在任意地方,空間是分散的,不需要連續 
2.鏈表中的元素都會有兩個屬性,一個是元素的值,另一個是指針,此指針標記了下一個元素的地址

每一個數據都會保存下一個數據的內存的地址,通過此地址可以找到下一個數據

3.查找數據時效率低,時間複雜度爲O(N)

因爲鏈表的空間是分散的,所以不具有隨機訪問性,如要需要訪問某個位置的數據,需要從第一個數據開始找起,依次往後遍歷,直到找到待查詢的位置,故可能在查找某個元素時,時間複雜度達到O(N)

4.空間不需要提前指定大小,是動態申請的,根據需求動態的申請和刪除內存空間,擴展方便,故空間的利用率較高 
5.任意位置插入元素和刪除元素效率較高,時間複雜度爲O(1) 
6.鏈表的空間是從堆中分配的

二、鏈表的優點

1.任意位置插入元素和刪除元素的速度快,時間複雜度爲O(1) 
2.內存利用率高,不會浪費內存 
3.鏈表的空間大小不固定,可以動態拓展

三、鏈表的缺點

隨機訪問效率低,時間複雜度爲0(N)

數組和鏈表操作空間複雜度表格對比圖

綜上:

對於想要快速訪問數據,不經常有插入和刪除元素的時候,選擇數組。

對於需要經常的插入和刪除元素,而對訪問元素時的效率沒有很高要求的話,選擇鏈表。

參考鏈接:https://blog.csdn.net/dangzhangjing97/article/details/81699050

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章