數組 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)。
所以需要根據實際業務場景選擇合適的數據結構。
另外上面說的是單鏈表,還有常見的雙向鏈表,如下圖
雙鏈表
雙鏈表既有前驅,也有后繼。在查詢鏈表的時候回更加方便。
雙鏈表的相關操作復雜度
這里暫時了解即可。
本篇結束。