第八篇:鏈表的學習:鏈表的頭插法和尾插法以及HashMap中鏈表結點的插入方式

前言

從前面的HashMap和ConcurrentHashMap的源碼分析我們可以得知,其內部的數據結構都用到了鏈表,所以,對鏈表的深入掌握非常有必要。本文將重點介紹單鏈表數據結構,然後通過代碼實現單鏈表的頭插法和尾插法。

單鏈表的介紹

我們都知道數組是需要一塊連續的內存空間來存儲的,而鏈表只需要零散的內存碎片,通過指針相連即可。首先我們來看看最簡單的鏈表-----單鏈表。
在這裏插入圖片描述
如上圖所示,分別是一個長度爲6的數組,和一個長度爲6的單鏈表。鏈表中的每個內存塊成爲“結點(Node)” ,每個結點Node包含兩部分,數據域data和後繼指針next,數據域用於存儲數據,next指針用於指向下一個結點的地址。單鏈表中的第一個結點成爲頭結點,頭結點記錄了鏈表的基地址,通過頭結點可以遍歷整個鏈表,最後一個結點稱之爲尾結點,尾結點的特殊之處在於其next指針指向的不是下一個結點地址,而是空地址NULL。

鏈表和數組的時間複雜度

插入、刪除操作時,爲了保存數據的連續性,需要進行數據的搬移,時間複雜度是o(n),鏈表中插入和刪除一個節點,不需要搬移結點,只需要考慮相鄰結點的指針改變。時間複雜度是O(1)。但是在查找數據的時候數組可以通過地址的索引快速找到某個元素,所以查找的時間複雜度是O(1)。而鏈表由於是不連續的,所以查找某個元素時必須從頭結點開始遍歷鏈表,所以查找的時間複雜度是O(n)。
如下圖片:
html>

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