一、常用數據結構
數組 —— 連續存儲單元存儲
鏈表 —— 連續指針節點
隊列 —— 先進先出
棧 —— 先進後出
堆 —— 通常是一個可以被看做一棵樹的數組對象
樹 —— 非線性層級數據結構
圖 —— 很少用到
hashmap —— 一種數組和鏈表組合的數據結構
hashtable —— 一種數組和鏈表組合的數據結構
二、數組
數組是很多語言中都內置的內核數據結構,它是一個連續的內存塊,支持按索引直接查找,時間複雜度爲O(1)。但插入元素和刪除元素的操作比較麻煩,最差情況下的時間複雜度爲O(n)。
在很多封裝的數據結構中,數組都是重要的組成成分,因爲它是連續的內存,可支持指針尋址操作。但是在操作時需要注意的是邊界溢出問題,因而,在數組內存不足時需要關心的操作往往是,原內存被銷燬,新內存開闢時帶來的系統開銷。
數組操作的一個典型特例是內存池管理技術。
其他:待補充。
三、鏈表
鏈表是一種物理存儲單元上非連續、無順序的存儲結構,它由一系列的節點組成,每個節點包含一組數據部分和一個或多個指向下一個節點的指針。鏈表的非連續和指針特點讓鏈表元素的插入和刪除變得很簡單,但相應的,查找工作則變得不是很容易。通常,在已知插入點的情況下,插入/刪除新元素的時間複雜度爲O(1),最壞情況下查找的時間複雜度爲O(n)。
按照鏈表節點的指針個數不同,鏈表可分爲:單向鏈表,雙向鏈表,多向鏈表。
按照鏈表中是否存在環形結構,鏈表可分爲:有環鏈表和無環鏈表。
【單鏈表】
單向鏈表的常見操作:
創建鏈表、鏈表查找、插入或刪除元素、鏈表反向、鏈表銷燬。
單鏈表進階操作:
鏈表元素去重、查找鏈表中間節點、查找鏈表倒數第 K 個節點、合併兩個排序鏈表、查找兩個鏈表第一個公共節點、查找鏈表的環。https://blog.csdn.net/weixin_38984102/article/details/79708742
【雙向鏈表】
【多向鏈表】
不多見。
四、隊列
隊列和棧是在結構上相近的數據結構,有時他們可以相互轉換。不同的是,隊列是先進先出結構,棧是先進後出結構。他們的
典型操作是:Push(壓入)和 Pop(彈出)。隊列是一種操作受限制的線性表,通常使用鏈表或者數組來實現。
單鏈隊列
循環隊列
陣列隊列
五、棧
六、堆
七、樹
樹是由n(n>0)個有限節點組成一個具有層次關係的集合。把它叫做“樹”是因爲它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。樹具有以下的特點:
-
每個節點都只有有限個子節點或無子節點;
-
沒有父節點的節點稱爲根節點;
-
每一個非根節點有且只有一個父節點;
-
除了根節點外,每個子節點可以分爲多個不相交的子樹;
-
樹裏面沒有環路(cycle)
https://blog.csdn.net/smilejiasmile/article/details/82843278
常見二叉樹:
1)二叉查找樹
2)平衡二叉樹
3)紅黑樹
4)B 樹
5)B+ 樹
6)B* 樹
特殊的樹:
1)字典樹
2)決策樹
3)默克爾帕特里夏樹
八、圖
https://www.cnblogs.com/wanghuaijun/p/7302303.html