[讀書筆記]-大話數據結構-3-線性表(三)-靜態鏈表、循環鏈表和雙向鏈表
阿新 • • 發佈:2017-11-13
ima 是否 特殊 ont 雙向鏈表 位置 方便 實現 部分
。所以,雙向鏈表中都有2個指針,一個指向其直接前驅,另一個指向直接後繼。
靜態鏈表
對於沒有指針的編程語言,可以用數組替代指針,來描述鏈表。讓數組的每個元素由data和cur兩部分組成,其中cur相當於鏈表的next指針,這種用數組描述的鏈表叫做靜態鏈表,這種描述方法叫做遊標實現法。我們對數組的第一個和最後一個元素做特殊處理,不存數據。讓數組的第一個元素cur存放第一個備用元素(未被占用的元素)下標,而數組的最後一個元素cur存放第一個有值的元素下標,相當於頭結點作用。空的靜態鏈表如下圖
當存放入一些數據時("甲""乙""丁""戊""己""庚"),靜態鏈表為:
靜態鏈表的插入操作
在靜態鏈表第三個位置插入"丙"後,結果如下:
靜態鏈表的刪除操作
刪除"甲"後,靜態鏈表如下:
循環鏈表
將單鏈表中終端節點的指針改為指向頭結點,就使整個單鏈表形成一個環,這種頭尾相接的單鏈表稱為單循環鏈表,簡稱循環鏈表。
帶頭節點的空循環鏈表(左)和帶頭結點的非空循環鏈表(右)
循環鏈表判斷結束的條件為:節點是否指向鏈表的頭節點。循環列表訪問第一個元素的復雜度為O(1),但訪問最後一個元素的復雜度為O(n)。為了方便最後一個元素的訪問,經常使用尾指針指向循環鏈表的最後一個元素。如下圖
這樣,最後一個節點即rear.next,第一個節點為rear.next.next。
雙向鏈表
雙向鏈表(double linked list)是在單鏈表的每個節點中,再設置一個指向其前驅節點的指針域
雙向循環鏈表,與循環鏈表類似,帶頭結點的雙向循環空鏈表如下圖(左),非空如下圖(右邊)
雙向鏈表的插入操作如下圖
雙向鏈表的刪除操作如下圖
[讀書筆記]-大話數據結構-3-線性表(三)-靜態鏈表、循環鏈表和雙向鏈表