1. 程式人生 > >[讀書筆記]-大話數據結構-3-線性表(三)-靜態鏈表、循環鏈表和雙向鏈表

[讀書筆記]-大話數據結構-3-線性表(三)-靜態鏈表、循環鏈表和雙向鏈表

ima 是否 特殊 ont 雙向鏈表 位置 方便 實現 部分

靜態鏈表

對於沒有指針的編程語言,可以用數組替代指針,來描述鏈表。讓數組的每個元素由data和cur兩部分組成,其中cur相當於鏈表的next指針,這種用數組描述的鏈表叫做靜態鏈表,這種描述方法叫做遊標實現法。我們對數組的第一個和最後一個元素做特殊處理,不存數據。讓數組的第一個元素cur存放第一個備用元素(未被占用的元素)下標,而數組的最後一個元素cur存放第一個有值的元素下標,相當於頭結點作用。空的靜態鏈表如下圖

技術分享

當存放入一些數據時("甲""乙""丁""戊""己""庚"),靜態鏈表為:

技術分享

靜態鏈表的插入操作

在靜態鏈表第三個位置插入"丙"後,結果如下:

技術分享

靜態鏈表的刪除操作

刪除"甲"後,靜態鏈表如下:

技術分享

循環鏈表

將單鏈表中終端節點的指針改為指向頭結點,就使整個單鏈表形成一個環,這種頭尾相接的單鏈表稱為單循環鏈表,簡稱循環鏈表。

帶頭節點的空循環鏈表(左)和帶頭結點的非空循環鏈表(右)

技術分享技術分享

循環鏈表判斷結束的條件為:節點是否指向鏈表的頭節點。循環列表訪問第一個元素的復雜度為O(1),但訪問最後一個元素的復雜度為O(n)。為了方便最後一個元素的訪問,經常使用尾指針指向循環鏈表的最後一個元素。如下圖

技術分享

這樣,最後一個節點即rear.next,第一個節點為rear.next.next。

雙向鏈表

雙向鏈表(double linked list)是在單鏈表的每個節點中,再設置一個指向其前驅節點的指針域

。所以,雙向鏈表中都有2個指針,一個指向其直接前驅,另一個指向直接後繼。

雙向循環鏈表,與循環鏈表類似,帶頭結點的雙向循環空鏈表如下圖(左),非空如下圖(右邊)

技術分享技術分享

雙向鏈表的插入操作如下圖

技術分享

雙向鏈表的刪除操作如下圖

技術分享

[讀書筆記]-大話數據結構-3-線性表(三)-靜態鏈表、循環鏈表和雙向鏈表