鏈表和數組的區別
參考鏈接:
https://techdifferences.com/difference-between-array-and-linked-list.html
https://www.2cto.com/kf/201605/507830.html
數組和鏈表之間的主要區別在於它們的結構。
- 數組是基於索引(index)的數據結構,其中每個元素都與索引相關聯。
- 鏈表依賴於引用(reference),其中每個節點都由數據以及對上一個和下一個元素的引用組成。
比較
比較依據 | 數組 | 鏈表 |
---|---|---|
大小 | 聲明時指定 | 無需指定,在執行時變化 |
儲存分配 | 編譯時分配 | 運行時分配 |
元素順序 | 連續的 | 隨機的 |
訪問元素 | 使用數組索引(下標)訪問:更快 | 從頭節點遍歷:比較慢 |
元素的插入和刪除 | 相對較慢 | 更簡單、更快速、更高效 |
搜索 | 二分搜索(有序)或線性搜索 | 線性搜索 |
所需內存 | 少 | 多 |
數組和鏈表之間的區別
- 數組的大小是固定的。相比之下,鏈表是動態和靈活的,可以擴展和收縮其大小。
- 在數組中,內存是在編譯時分配的,而在鏈接列表中,內存是在執行或運行時分配的。
- 存儲位置上,數組邏輯上相鄰的元素在物理存儲位置上也相鄰,而鏈表不一定。
- 訪問數組元素很快,即,如果要進入第四個元素,則必須在方括號內寫入變量名稱及其索引或位置。即,如果要訪問第四個元素,則可以直接通過索引訪問。但是,在鏈表中,必須從頭部開始,然后一直工作到第四個元素。
- 插入和刪除時,數組平均需要移動n/2個元素,而鏈表只需修改指針即可。
- 按序號查找時,數組可以直接用索引進行隨機訪問,時間復雜度為O(1) ,而鏈表不支持隨機訪問,平均需要O(n)。
- 按值查找時,若數組無序,數組和鏈表時間復雜度均為O(N),但是當數組有序時,可以采用二分查找將時間復雜度降為O(logN)。
- 由於實際數據存儲在數組的索引中,因此內存需求較少。相反,由於鏈表額外存儲了下一個和上一個節點的引用,因此在鏈表中需要更多的內存。