算法基礎3:數組和鏈表

數組 Array: 內存里連續的一組空間。


數組(左下標,右 內存地址【示意】)

數組可以隨機訪問內存中的數據(根據下標),其時間復雜度是O(1)。?

數組的常見操作有查詢(隨機訪問),插入,刪除。


數組插入和刪除

因為是連續內存,插入或刪除。需要挪位置。 比如圖中的 插入。 元素D需要插入到數組下邊為3的地方,而數組下標后邊的元素需要依次向后移除。所以插入的時間復雜度是O(N).

?當然了如果你插入的是數組中最后一個元素,后面沒有元素需要挪動,那么時間復雜度是O(1).

? 如果你插入的是數組中第一個元素,后面元素都需要挪動,那么時間復雜度是O(N).

所以平均復雜度是O(n/2), 而n不是具體數字,還是一個概數,所以復雜度也就是O(N)。喜歡鉆牛角尖的同學可以仔細理解一下這里的復雜度。

同理刪除也是如此。


數組相關操作的復雜度


鏈表 linked list


鏈表數據結構示意圖

使用場景:?

1.在插入和刪除比較多的情況下使用。(時間復雜度為O(1),快于數組的O(N))

2.不知道有多少個原始元素。

鏈表還有一些變種:


變種鏈表

鏈表的常見操作有 插入,刪除。

鏈表數據結構示意圖

很顯然,插入和刪除只需要將相關節點的next的指針調整。復雜度為O(1)。

但是他的查找就需要一個個找了,復雜度為O(N)。

所以需要根據實際業務場景選擇合適的數據結構。

另外上面說的是單鏈表,還有常見的雙向鏈表,如下圖


雙鏈表

雙鏈表既有前驅,也有后繼。在查詢鏈表的時候回更加方便。


雙鏈表的相關操作復雜度

這里暫時了解即可。

本篇結束。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容