一、常用資料結構
陣列 —— 連續儲存單元儲存
鍊錶 —— 連續指標節點
佇列 —— 先進先出
棧 —— 先進後出
堆 —— 通常是乙個可以被看做一棵樹的陣列物件
樹 —— 非線性層級資料結構
圖 —— 很少用到
hashmap —— 一種陣列和鍊錶組合的資料結構
hashtable —— 一種陣列和鍊錶組合的資料結構
二、陣列
陣列是很多語言中都內建的核心資料結構,它是乙個連續的記憶體塊,支援按索引直接查詢,時間複雜度為o(1)。但插入元素和刪除元素的操作比較麻煩,最差情況下的時間複雜度為o(n)。
在很多封裝的資料結構中,陣列都是重要的組成成分,因為它是連續的記憶體,可支援指標定址操作。但是在操作時需要注意的是邊界溢位問題,因而,在陣列記憶體不足時需要關心的操作往往是,原記憶體被銷毀,新記憶體開闢時帶來的系統開銷。
陣列操作的乙個典型特例是記憶體池管理技術。
其他:待補充。
三、鍊錶
鍊錶是一種物理儲存單元上非連續、無順序的儲存結構,它由一系列的節點組成,每個節點包含一組資料部分和乙個或多個指向下乙個節點的指標。鍊錶的非連續和指標特點讓鍊錶元素的插入和刪除變得很簡單,但相應的,查詢工作則變得不是很容易。通常,在已知插入點的情況下,插入/刪除新元素的時間複雜度為o(1),最壞情況下查詢的時間複雜度為o(n)。
按照鍊錶節點的指標個數不同,鍊錶可分為:單向鍊錶,雙向鍊錶,多向鍊錶。
按照鍊錶中是否存在環形結構,鍊錶可分為:有環鏈表和無環鏈表。
【單鏈表】
單向鍊錶的常見操作:
建立鍊錶、鍊錶查詢、插入或刪除元素、鍊錶反向、鍊錶銷毀。
單鏈表高階操作:
鍊錶元素去重、查詢鍊錶中間節點、查詢鍊錶倒數第 k 個節點、合併兩個排序鍊錶、查詢兩個鍊錶第乙個公共節點、查詢鍊錶的環。
【雙向鍊錶】
【多向鍊錶】
不多見。
四、佇列
佇列和棧是在結構上相近的資料結構,有時他們可以相互轉換。不同的是,佇列是先進先出結構,棧是先進後出結構。他們的
典型操作是:push(壓入)和 pop(彈出)。佇列是一種操作受限制的線性表,通常使用鍊錶或者陣列來實現。
單鏈佇列
迴圈佇列
陣列佇列
五、棧
六、堆
七、樹
樹是由n(n>0)個有限節點組成乙個具有層次關係的集合。
把它叫做「樹」是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。樹具有以下的特點:
常見二叉樹:
3)紅黑樹
4)b 樹
5)b+ 樹
6)b* 樹
特殊的樹:
1)字典樹
2)決策樹
3)默克爾帕特里夏樹
八、圖
資料結構與演算法總論
void foo listnode head 資料結構與演算法 自然所有的資料結構都會具有的性質是結構特性 structure 但對於其他一些資料結構來說,比如優先佇列或者堆 二叉堆 左式堆 還存在著有序性。無論是棧 佇列還是優先佇列,都可視為一種快取結構,可將資料元素儲存其中,可以訪問和彈出。資料...
資料結構 資料結構緒論
資料結構是相互間存在一種或多種特定關係的資料元素的集合。程式設計 資料結構 演算法 資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及他們之間的關係和操作等相關問題的學科。資料元素是組成資料的 有一定意義的基本單位,是計算機中通常作為整體處理,也被稱為記錄。乙個資料元素可以由若干個資料項組...
資料結構 資料結構演算法
分治法 對於乙個規模為n的問題,若該問題可以容易地解決 比如說規模n較小 則直接解決 否則將其分解為k個規模較小的子問題,這些子問題互相獨立且與原問題形式相同,遞迴地解這些子問題,然後將各子問題的解合併得到原問題的解。動態規劃法 這種演算法也用到了分治思想,它的做法是將問題例項分解為更小的 相似的子...