存儲類別 | 順序存儲結構 | 單鏈表 |
---|---|---|
存儲分配方式 | 用一段連續的存儲單元依次存儲線性表的數據元素 | 採用鏈式存儲結構,用一組任意的存儲單元存放線性表的元素 |
時間性能 | 查找O(1)、插入和刪除O(n) | 查找O(n)、插入和刪除O(1) |
空間性能 | 需要預分配存儲空間,分大了浪費,小了容易發生上溢 | 不需要分配存儲空間,只要有就可以分配,元素個數不受限制 |
由圖可以得知,順序表 和 鏈表都是線性表。
線性表:
線性表是最簡單也是最常用的一種數據結構。英文字母表(A、B、…、Z)是一個線性表,表中每個英文字母是一個數據元素;成績單是一個線性表,表中每一行是一個數據元素,每個數據元素又由學號、姓名、成績等數據項組成。
定義:
線性表是具有相同特性的數據元素的一個有限序列。線性表一般表示爲:
L = (a1, a2, …, ai,ai+1 ,…, an)
線性表的順序存儲結構
順序表
把線性表中的所有元素按照其邏輯順序依次存儲在計算機存儲器中指定存儲位置開始的一塊連續的存儲空間中。
順序表必須佔用一整塊事先分配大小固定的存儲空間,這樣不便於存儲空間的管理。爲此提出了可以實現存儲空間動態管理的鏈式存儲方式–鏈表。
鏈表
在鏈式存儲中,每個存儲結點不僅包含元素本身的信息(數據域),還包含元素之間邏輯關係的信息,即一個結點中包含有直接後繼結點的地址信息,這稱爲指針域。這樣可以通過一個結點的指針域方便的找到後繼結點的位置。
-
由於順序表中每個元素至多隻有一個直接前驅元素和一個直接後繼元素。當採用鏈式存儲時,一種最簡單也最常用的方法是:
-
在每個結點中除包含數據域外,只設置一個指針域用以指向其直接後繼結點,這種構成的鏈接表稱爲線性單向鏈接表,簡稱單鏈表。
另一種方法是,在每個結點中除包含數值域外,設置兩個指針域,分別用以指向直接前驅結點和直接後繼結點,這樣構成的鏈接表稱爲線性雙向鏈接表,簡稱雙鏈表。
單鏈表當訪問一個結點後,只能接着訪問它的直接後繼結點,而無法訪問他的直接前驅結點。雙鏈表則既可以依次向後訪問每個結點,也可以依次向前訪問每個結點。