鏈表

在電腦科學中 ， 鏈表 （ Linked list ） 是一種常見的基礎數據結構 ， 是一種線性表 ， 但是並不會按線性的順序存儲數據 ， 而是在每一個節點裏存到下一個節點的指針 ( Pointer ) 。 由於不必須按順序存儲 ， 鏈表在插入的時候可以達到O ( 1 ) 的複雜度 ， 比另一種線性表順序錶快得多 ， 但是查找一個節點或者訪問特定編號的節點則需要O ( n ) 的時間 ， 而順序表相應的時間複雜度分別是O ( logn ) 和O ( 1 ) 。 使用鏈表結構可以克服數組鏈表需要預先知道數據大小的缺點 ， 鏈表結構可以充分利用計算機內存空間 ， 實現靈活的內存動態管理 。 但是鏈表失去了數組隨機讀取的優點 ， 同時鏈表由於增加了結點的指針域 ， 空間開銷比較大 。 在計算機科學中 ， 鏈表作爲一種基礎的數據結構可以用來生成其它類型的數據結構 。 鏈表通常由一連串節點組成 ， 每個節點包含任意的實例數據 （ data fields ） 和一或兩個用來指向上一個 / 或下一個節點的位置的鏈接 （ " links " ） 。 鏈表最明顯的好處就是 ， 常規數組排列關聯項目的方式可能不同於這些數據項目在記憶體或磁盤上順序 ， 數據的存取往往要在不同的排列順序中轉換 。 而鏈表是一種自我指示數據類型 ， 因爲它包含指向另一個相同類型的數據的指針 （ 鏈接 ） 。 鏈表允許插入和移除表上任意位置上的節點 ， 但是不允許隨機存取 。 鏈表有很多種不同的類型 ： 單向鏈表 ， 雙向鏈表以及循環鏈表 。 鏈表可以在多種編程語言中實現 。 像Lisp和Scheme這樣的語言的內建數據類型中就包含了鏈表的存取和操作 。 程序語言或面嚮對象語言 ， 如C / C++ 和Java依靠易變工具來生成鏈表 。