算法與數據結構【C++與Java實現】:鏈表篇

對於大多數應用而言,存儲數據最好的方式就是使用表。

表有兩種最常用的實現:數組和鏈表

數組是在內存中連續存在的結構,且編譯器就需要直到其大小。對於無法提前預估數據規模的程序,如果初始的數組太小,則需要擴展數組大小,這常常伴隨着大量的內存複製,時間複雜度很高;如果初始的數組太大,則會造成很大的內存資源浪費。

鏈表也是一種連續的數據結構,與數組的不同是,每一個元素在內存中不一定連續存儲,元素與元素之間的聯繫通過指針(引用)進行,可以靈活的調整大小。

但是,鏈表也有其缺點:不能像數組那樣以O(1)的時間查找元素,必須從頭,按照順序遍歷來查找元素,所以很慢。這就引出了很多改善鏈表性能的變種。

下面挑選了一些重要的鏈表變種進行實現:

c++實現的鏈表及其變種:

普通單向鏈表:普通鏈表
雙向鏈表:便於向前遍歷的鏈表
循環鏈表:首尾相接的鏈表
自組織鏈表:根據數據訪問頻率或次數自動調整鏈表順序,提高訪問效率的鏈表
跳躍鏈表:查詢元素不用線性查找,允許跳過一定結點的鏈表
稀疏表:使用鏈表,存儲數據非常稀疏的二維(或更高維)表格

 

Java實現的鏈表及其變種:

普通單向鏈表:普通鏈表
雙向鏈表:便於向前遍歷的鏈表
循環鏈表:首尾相接的鏈表
自組織鏈表:根據數據訪問頻率或次數自動調整鏈表順序,提高訪問效率的鏈表
跳躍鏈表:查詢元素不用線性查找,允許跳過一定結點的鏈表
稀疏表:使用鏈表,存儲數據非常稀疏的二維(或更高維)表格

 

以上繫個人作品,沒有得到許可請勿轉載。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章