1. 程式人生 > >【線性表4】線性表的鏈式實現:靜態表

【線性表4】線性表的鏈式實現:靜態表

分配 next 空間 png 刪除 image 技術 一個 分享

簡介

靜態表依然是一種鏈表,只不過結點是存儲在預先分配好的一個大的結點數組中的。使用靜態表的場合是:有些編程語言沒有指針,但有數組,因此就不能使用傳統的鏈表,這個時候就可以使用靜態表是去實現。

特點:結點的 “指針域” 保存的是下一個結點在數組中的索引。它依然是鏈表,不支持隨機訪問。

靜態表在實際編程中並不常用。

靜態表的原理

如下是一個表內容為 【‘A‘ , ‘B‘ , ‘C‘ , ‘D‘ , ‘E‘】 的字符鏈表的剖析圖

技術分享

假設 L 是 StaticList 對象 ,內部使用數組 nodes保存所有結點空間,則從L的成員字段firstNodeIndex可以獲取到第一個結點在數組中的位置,因此

訪問到第一個結點 : i = firstNodeIndex ;

nodes[i] 第一個結點對象

nodes[i].element 第一個結點的數據域

nodes[i].next 第一個結點的“指針域”

訪問到第二個結點 : i = nodes[i].next ;

nodes[i] 第二個結點對象

nodes[i].element 第二個結點的數據域

nodes[i].next 第二個結點的“指針域”

如此下去......當訪問到的結點的next為-1時,表示它是最後一個結點。最後一個結點的索引用字段lastNodeIndex保存。

我們還用了一個set對象保存結點數組中,空閑的結點的索引。如果需要創建新的結點,則從這個集合裏任意取出一個索引並從set中移除。如果有結點被刪除或者數組擴充了容量,則將這些結點的索引添加到set中使之可以再被利用。

由於靜態表也是一種鏈表,因此插入,刪除數據也不需要移動數組元素,只需修改結點的“指針域”即可。

【線性表4】線性表的鏈式實現:靜態表