鏈表介紹
鏈表與順序表一樣,也屬於線性表。
一個線性表是某類數據元素的一個集合,表裏同時記錄着元素之間的順序關係。
線性表的數據之間有順序關係,順序關係分爲兩種,一種是物理有序,即數據物理存儲的位置順序與數據之間的順序關係一致,另一種是邏輯有序,即數據之間的順序關係是由某種邏輯關係(如指針)來決定的,與物理存儲的位置無關。
順序表是物理有序,而鏈表是邏輯有序。
一、鏈表簡介
鏈表(Linked list)是一種線性表,鏈表中的數據存儲在一個個的節點裏,節點不一定是連續存儲的,在每一個節點中,除了存儲數據以外,還會存儲下一個節點的位置信息(內存地址),根據此位置信息(鏈接)可以找到下一個節點。
在鏈表的每一個節點中,分爲不同的存儲區域,信息域(元素域)和鏈接域(引用域)。
信息域用來存儲該節點中具體保存的數據。
鏈接域用來存儲指向的節點的位置信息(內存地址)。
鏈表的“頭”指向第一個節點,第一個節點是鏈表的頭節點(首節點),從頭節點出發,可以依次找到鏈表中的所有節點。
節點是分散存儲的,每個節點的鏈接域都可以指向空,將這些節點鏈接成一個鏈表,就是從頭節點開始,鏈接域依次指向下一個節點,形成一個鏈。
二、鏈表的分類
1. 單向鏈表
最簡單的鏈表是單向鏈表。
單向鏈表也叫單鏈表,是鏈表中最簡單的一種形式,它的每個節點包含兩個域,一個信息域和一個鏈接域。鏈接域指向鏈表中的下一個節點,而最後一個節點的鏈接域指向一個空值。
2. 雙向鏈表
雙向鏈表又稱雙面鏈表,相對於單向鏈表,雙向鏈表除了向後的鏈接域,還有向前的鏈接域。
每個節點包含三個域,一個信息域和兩個鏈接域。一個鏈接域指向前一個節點,當此節點爲第一個節點時,指向空值,另一個鏈接域指向下一個節點,當此節點爲最後一個節點時,指向空值。
3. 單向循環鏈表
單向循環鏈表是將單向鏈表“首尾相連”。
單向鏈表中最後一個節點的鏈接域指向的是空,而單向循環鏈表中,最後一個節點的鏈接域指向鏈表的頭節點,形成一個“環形”的鏈。
三、鏈表與順序表的對比
順序表是物理有序的,順序表的構建需要申請連續的存儲空間,在進行擴容時又需要進行數據的遷移,所以使用起來並不是很靈活。
鏈表是邏輯有序的,每個節點都可以單獨存儲,可以充分利用計算機內存空間,實現靈活的內存動態管理。但是,由於鏈表增加了結點的鏈接域(指針),空間開銷比較大。
順序表可以根據內存地址的關係(索引)快速讀取到任意位置的數據。
鏈表不能快速地訪問到指定數據,必須從頭節點開始尋找。
除此之外,因爲順序表和鏈表的不同結構,對它們進行添加、刪除數據等操作的原理不同,耗時也不同。