循環鏈表和雙向鏈表的區別是是什么?
單向鏈表或者單鏈表 單向鏈表,它包含兩個域,一個信息域和一個指針域。這個鏈接指向表中的下一個節點,而最后一個節點則指向一個空值NULL。
單向鏈表只可向一個方向遍歷。 查找一個節點的時候需要從第一個節點開始每次訪問下一個節點,一直訪問到需要的位置。也可以提前把一個節點的位置另外保存起來,然后直接訪問。 雙向鏈表,也叫雙鏈表 雙向鏈表中不僅有指向后一個節點的指針,還有指向前一個節點的指針。第一個節點的"前連接"指向NULL,最后一個節點的"后連接"指向NULL。
這樣可以從任何一個節點訪問前一個節點,也可以訪問后一個節點,以至整個鏈表。
一般是在需要大批量的另外儲存數據在鏈表中的位置的時候用。
由于另外儲存了指向鏈表內容的指針,并且可能會修改相鄰的節點,有的時候第一個節點可能會被刪除或者在之前添加一個新的節點。
這時候就要修改指向首個節點的指針。
有一種方便的可以消除這種特殊情況的方法是在最后一個節點之后、第一個節點之前儲存一個永遠不會被刪除或者移動的虛擬節點,形成一個循環鏈表。
這個虛擬節點之后的節點就是真正的第一個節點。
這種情況通常可以用這個虛擬節點直接表示這個鏈表。 循環鏈表 在一個循環鏈表中, 首節點和末節點被連接在一起。
這種方式在單向和雙向鏈表中皆可實現。
要轉換一個循環鏈表,你開始于任意一個節點然后沿著列表的任一方向直到返回開始的節點。
循環鏈表可以被視為"無頭無尾"。 循環鏈表中第一個節點之前就是最后一個節點,反之亦然。循環鏈表的無邊界使得在這樣的鏈表上設計算法會比普通鏈表更加容易。
對于新加入的節點應該是在第一個節點之前還是最后一個節點之后可以根據實際要求靈活處理,區別不大。
另外有一種模擬的循環鏈表,就是在訪問到最后一個節點之后的時候,手工跳轉到第一個節點。訪問到第一個節點之前的時候也一樣。
這樣也可以實現循環鏈表的功能,在直接用循環鏈表比較麻煩或者可能會出現問題的時候可以用。