單鏈表,雙鏈表,循環鏈表的區別

單向鏈表(單鏈表)

         單向鏈表,它包含兩個域,一個信息域和一個指針域。這個鏈接指向表中的下一個節點,而最後一個節點則      指向一個空值NULL。
單向鏈表只可向一個方向遍歷。
查找一個節點的時候需要從第一個節點開始每次訪問下一個節點,一直訪問到需要的位置。也可以提前把一個節點的位置另外保存起來,然後直接訪問。

雙向鏈表,(雙鏈表)
          雙向鏈表中不僅有指向後一個節點的指針,還有指向前一個節點的指針。第一個節點的"前連接"指向NULL,最後一個節點的"後連接"指向NULL。
這樣可以從任何一個節點訪問前一個節點,也可以訪問後一個節點,以至整個鏈表。一般是在需要大批量的另外儲存數據在鏈表中的位置的時候用。
由於另外儲存了指向鏈表內容的指針,並且可能會修改相鄰的節點,有的時候第一個節點可能會被刪除或者在之前添加一個新的節點。這時候就要修改指向首個節點的指針。
有一種方便的可以消除這種特殊情況的方法是在最後一個節點之後、第一個節點之前儲存一個永遠不會被刪除或者移動的虛擬節點,形成一個循環鏈表。這個虛擬節點之後的節點就是真正的第一個節點。這種情況通常可以用這個虛擬節點直接表示這個鏈表。


循環鏈表
        在一個循環鏈表中, 首節點和末節點被連接在一起。這種方式在單向和雙向鏈表中皆可實現。要轉換一個循環鏈表,你開始於任意一個節點然後沿着列表的任一方向直到返回開始的節點。循環鏈表可以被視爲"無頭無尾"。
循環鏈表中第一個節點之前就是最後一個節點,反之亦然。循環鏈表的無邊界使得在這樣的鏈表上設計算法會比普通鏈表更加容易。對於新加入的節點應該是在第一個節點之前還是最後一個節點之後可以根據實際要求靈活處理,區別不大。
另外有一種模擬的循環鏈表,就是在訪問到最後一個節點之後的時候,手工跳轉到第一個節點。訪問到第一個節點之前的時候也一樣。這樣也可以實現循環鏈表的功能,在直接用循環鏈表比較麻煩或者可能會出現問題的時候可以用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章