java鏈式存儲
『壹』 鏈式存儲結構屬於線性結構還是非線性的存儲結構
鏈表是線性表的鏈式存儲結構
線性表的鏈式存儲表示的特點是用一組任意的存儲單元存儲線性表的數據元素(這組存儲單元可以是連續的,也可以是不連續的)。因此,為了表示每個數據元素與其直接後繼數據元素
之間的邏輯關系,對數據元素來說,除了存儲其本身的信息之外,還需存儲一個指示其直接後繼的信息(即直接後繼的存儲位置)。由這兩部分信息組成一個「結點」,表示線性表中一個數據元素
。
鏈表(Linked
list)是一種常見的基礎數據結構,是一種線性表,但是並不會按線性的順序存儲數據,而是在每一個節點里存到下一個節點的指針(Pointer)。由於不必按順序存儲,鏈表在插入的時候可以達到O(1)的復雜度,比另一種線性表:順序錶快得多,但是查找一個節點或者訪問特定編號的節點則需要O(n)的時間,而順序表相應的時間復雜度分別是O(logn)和O(1)。
使用鏈表結構可以克服數組鏈表需要預先知道數據大小的缺點,鏈表結構可以充分利用計算機內存空間,實現靈活的內存動態管理。但是鏈表失去了數組隨機讀取的優點,同時鏈表由於增加了結點的指針域,空間開銷比較大。在計算機科學中,鏈表作為一種基礎的數據結構可以用來生成其它類型的數據結構。
鏈表通常由一連串節點組成,每個節點包含任意的實例數據(data
fields)和一或兩個用來指向明上一個/或下一個節點的位置的鏈接("links")。鏈表最明顯的好處就是,常規數組排列關聯項目的方式可能不同於這些數據項目在記憶體或磁碟上順序,數據的存取往往要在不同的排列順序中轉換。而鏈表是一種自我指示數據類型,因為它包含指向另一個相同類型的數據的指針(鏈接)。鏈表允許插入和移除表上任意位置上的節點,但是不允許隨機存取。
鏈表有很多種不同的類型:單向鏈表,雙向鏈表以及循環鏈表。鏈表可以在多種編程語言中實現。像Lisp和Scheme這樣的語言的內建數據類型中就包含了鏈表的存取和操作。程序語言或面向對象語言,如C,C++和Java依靠易變工具來生成鏈表。
『貳』 線性表順序存儲結構和鏈式存儲結構的優缺點(JAVA)
從數據結構的角度來說順序結構的存儲空間固定,可擴展性差,但是如果數據元素個數已知,較鏈式存儲節省空間。他的優點是隨機讀取任意一個元素(因為元素時順序存儲的,所以元素的存儲位置之間有一定的關系)但是順序存儲的缺點是刪除,插入操作需要花費很多時間在移動元素上。
對於鏈式存儲而言,插入和刪除元素開銷小,操作簡便。可擴展性強。
綜上所述,如果元素個數已知,且插入刪除較少的可以使用順序結構,而對於頻繁有插入刪除操作,元素個數未知的,最好使用鏈式結構,編程時可結合要處理的數據的特點設計數據結構的。