線性表的鏈式存儲表示的特點是使用壹組任意的存儲單元來存儲線性表的數據元素(這組存儲單元可以是連續的,也可以是不連續的)。因此,為了表示每個數據元素及其直接後繼者。
對於數據元素來說,除了自身的信息之外,它們還需要存儲指示其直接繼承的信息(即直接繼承的存儲位置)。這兩部分信息形成壹個“節點”,它代表線性表中的壹個數據元素。
鏈接列表(鏈接的
List)是壹種常見的基本數據結構和線性表,但它不是以線性順序存儲數據,而是指向每個節點中的下壹個節點的指針。由於不需要按順序存儲,鏈表在插入時可以達到O(1)的復雜度,這比另壹種線性表:順序表要快得多,但查找壹個節點或訪問壹個特定編號的節點需要O(n)的時間,順序表對應的時間復雜度分別為O(logn)和O(1)。
鏈表結構的使用可以克服數組鏈表需要預先知道數據大小的缺點。鏈表結構可以充分利用計算機內存空間,實現靈活的動態內存管理。然而,鏈表失去了隨機讀取數組的優勢,同時,由於增加了節點的指針字段,鏈表的空間開銷很大。在計算機科學中,鏈表作為壹種基本的數據結構,可以用來生成其他類型的數據結構。
鏈表通常由壹系列節點組成,每個節點包含任意實例數據(數據
字段)和壹個或兩個用於指向下壹個和/或前壹個節點位置的鏈接(“鏈接”)。鏈表最明顯的優點是在常規數組中排列相關項的方式可能與這些數據項在內存或磁盤中的順序不同,並且數據訪問經常需要以不同的排列順序進行轉換。鏈表是壹種自指示數據類型,因為它包含壹個指向另壹個相同類型數據的指針(鏈接)。鏈表允許在表上的任何地方插入和刪除節點,但不允許隨機訪問。
有許多不同類型的鏈表:單向鏈表、雙向鏈表和循環鏈表。鏈表可以用多種編程語言實現。Lisp和Scheme等語言的內置數據類型包括鏈表的訪問和操作。編程語言或面向對象語言(如C、C++和Java)依賴可變工具來生成鏈表。