1.概念和結構
概念:鏈表是一種物理存儲結構上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中
的指針鏈接次序實現的。
通過指針鏈接次序實現的要怎么理解呢?
這是一張鏈表的結構圖:
與順序表不同的是,鏈表里的每節“車廂” (仔細觀察這張結構圖會發現它和火車很像,并且可以看
出由4個車廂組成) 都是獨立申請下來的空間,我們稱之為“結點/節點”
結點的組成主要有兩個部分:當前結點要保存的數據和保存下一個結點的地址(指針變量)。
圖中指針變量plist保存的是第一個結點的地址,我們稱plist此時“指向”第一個結點, 也稱為鏈表的的
頭結點?。
我們可以把鏈表比喻成 火車,這樣會非常直觀:
1. 「火車車廂」=「鏈表結點」
每節火車車廂就是鏈表的一個結點:
- 車廂里裝的「乘客、貨物」→ 對應結點儲存的數據(存實際內容,比如數字、字符串)。
- 車廂之間的「掛鉤」→ 對應結點的指針(存下一個結點的地址,把車廂串起來)。
最后一節車廂的掛鉤「沒有連接下一節」→ 對應鏈表最后一個結點的指針域為?NULL(空),表
示鏈表結束。
2. 「火車頭」=「鏈表頭指針」
火車頭(車頭本身也算一節特殊車廂)→ 對應鏈表的頭指針(或頭結點):
- 頭指針存的是「第一節車廂的地址」→ 你通過頭指針,才能找到整列火車(遍歷鏈表)。
- 如果火車頭丟了(頭指針丟了),就找不到整列火車了 → 鏈表頭指針是訪問鏈表的唯一入口。
簡單總結:
鏈表 = 火車,節點 = 車廂,指針 = 掛鉤,頭指針 = 火車頭。
這種比喻能幫你記住:鏈表靠「指針(掛鉤)」把「節點(車廂)」串起來,增刪節點只改指針
(掛鉤),不需要移動其他節點(車廂),這也是鏈表最核心的特點~
2.鏈表和順序表的關系:
鏈表和順序表都屬于線性表,是數據在邏輯結構上呈現線性關系的兩種不同存儲方式實現的結構,
用于存儲和管理數據,二者關系可從以下方面理解:
一、相同點:
- 邏輯結構:都用于存儲具有線性邏輯關系的數據,即數據元素在邏輯上是“一對一”的相鄰關系,
比如存儲一列學生的成績,都能體現成績的先后順序 。
- 基本操作:都支持常見的數據操作,像添加(插入)、刪除、查找、遍歷等操作,只是實現方式
和效率有差異。
二、不同點:
可以從 存儲、訪問、增刪、空間、適用場景 這 5 點簡單概括:
存儲:
順序表 : 內存連續,元素“擠在一起”
單鏈表 : 內存不連續,靠指針“串”起節點?
訪問:
順序表 :?下標直接訪問(如 ?arr[2]?),很快
單鏈表 :? 必須從頭遍歷找,慢(像數火車車廂)
增刪:
順序表 :?中間增刪要移動大量元素,慢
單鏈表 :?改指針就能增刪(像火車改掛鉤),快?
空間:
順序表 :?預分配空間,滿了擴容麻煩(需拷貝數據)
單鏈表 :?用多少申請多少,靈活但有指針開銷
適用場景:
順序表 :?頻繁查、數據少且穩定(如查成績)
單鏈表 :?頻繁增刪、數據動態變化(如歷史記錄)
簡單說,順序表像“排隊的一長串盒子”,空間連續好快速找;鏈表像“串起的珠子”,節點分散但增
刪靈活,實際開發選哪種,得看數據操作特點和性能需求。
關于單鏈表的概念基礎知識就這么些。下一篇小編為大家帶來關于單鏈表的實現。也是非常復雜的
一部分內容。感謝大家的觀看!