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