【數據結構】總論

一、常用數據結構

 

數組  —— 連續存儲單元存儲

鏈表  —— 連續指針節點

隊列  —— 先進先出

棧     —— 先進後出

堆     —— 通常是一個可以被看做一棵樹的數組對象

樹     —— 非線性層級數據結構

圖     —— 很少用到

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

 

 

 

 

 

 

 

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