常見資料結構:
陣列(一對一)棧佇列
鍊錶樹(一對多)
圖(多對多)堆雜湊
資料結構是指相互之間存在著一種或多種關係的資料元素的集合和該集合中資料元素之間的關係組成
常用的資料結構有:陣列,棧,鍊錶,佇列,樹,圖,堆,雜湊表等,
一. 陣列
優點:1、按照索引查詢元素速度快
2、按照索引遍歷陣列方便
缺點:1、陣列的大小固定後就無法擴容了
2、陣列只能儲存一種型別的資料
3、新增,刪除的操作慢,因為要移動其他的元素。
適用場景:
頻繁查詢,對儲存空間要求不大,很少增加和刪除的情況。
二.棧 棧的特點是:先進後出,或者說是後進先出,從棧頂放入元素的操作叫入棧,取出元素叫出棧。
三.佇列
佇列與棧一樣,也是一種線性表,不同的是,佇列可以在一端新增元素,在另一端取出元素,
也就是:先進先出。從一端放入元素的操作稱為入隊,取出元素為出隊
四.鍊錶
鍊錶是物理儲存單元上非連續的、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶的指標位址實現,每個元素包含兩個結點,
乙個是儲存元素的資料域
(記憶體空間),另乙個是指向下乙個結點位址的指標域。
根據指標的指向,鍊錶能形成不同的結構,例如單鏈表,雙向鍊錶,迴圈鍊錶等。
優點:鍊錶是很常用的一種資料結構,不需要初始化容量,可以任意加減元素;
新增或者刪除元素時只需要改變前後兩個元素結點的指標域指向位址即可,所以新增,刪除很快;
缺點:因為含有大量的指標域,占用空間較大;
查詢元素需要遍歷鍊錶來查詢,非常耗時。
適用場景:
資料量較小,需要頻繁增加,刪除操作的場景
五.樹樹是一種資料結構,它是由n(n>=
1)個有限節點組成乙個具有層次關係的集合。
把它叫做 「樹」 是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。
它具有以下的特點:
每個節點有零個或多個子節點;
沒有父節點的節點稱為根節點;
每乙個非根節點有且只有乙個父節點;
除了根節點外,每個子節點可以分為多個不相交的子樹;
二叉樹是樹的特殊一種,具有如下特點:
1、每個結點最多有兩顆子樹,結點的度最大為2。
2、左子樹和右子樹是有順序的,次序不能顛倒。
3、即使某結點只有乙個子樹,也要區分左右子樹。
二叉樹是一種比較有用的折中方案,它新增,刪除元素都很快,並且在查詢方面也有很多的演算法優化,
所以,二叉樹既有鍊錶的好處,也有陣列的好處,是兩者的優化方案,在處理大批量的動態資料方面非常有用。
擴充套件:二叉樹有很多擴充套件的資料結構,包括平衡二叉樹、紅黑樹、b
+樹等,這些資料結構二叉樹的基礎上衍生了很多的功能,
在實際應用中廣泛用到,例如mysql的資料庫索引結構用的就是b
+樹,還有hashmap的底層原始碼中用到了紅黑樹。
這些二叉樹的功能強大,但演算法上比較複雜,想學習的話還是需要花時間去深入的。
六、雜湊表
雜湊表,也叫雜湊表,是根據關鍵碼和值
(key和value) 直接進行訪問的資料結構,
通過key和value來對映到集合中的乙個位置,這樣就可以很快找到集合中的對應元素。
七.堆就是一顆完全二叉樹
(從左到右,子節點必須是滿的)
八.圖圖是由結點的有窮集合v和邊的集合e組成。
其中,為了與樹形結構加以區別,在圖結構中常常將結點稱為頂點,
邊是頂點的有序偶對,若兩個頂點之間存在一條邊,就表示這兩個頂點具有相鄰關係。
按照頂點指向的方向可分為無向圖和有向圖:
整理 資料結構 堆
一 堆的定義 堆的定義是 n個元素的序列,當且僅當滿足如下關係時被成為堆 1 ki k2i 且 ki k2i 1 或 2 ki k2i 且 ki k2i 1 i 1,2,n 2 當滿足 1 時,為最小堆,當滿足 2 時,為最大堆。最大堆和最小堆的例子 堆常用來實現優先佇列,在這種佇列中,待刪除的元素...
go資料結構整理
初始化基本一樣,不同點需要注意,make使用,nil變數的訪問 初始化 57 修改元素值函式,指標版本和副本版本,指標版會修改原值 58 func modify arr 3 int,i int,v int 62 63 func main 預設初始化為0 66 v2 int 根據初始化列表決定元素個數...
資料結構習題 整理中
hdu 1251 統計出以某個字串為字首的單詞數量 hdu 1800 要求的就是有幾個遞減的序列,也就是找到最多重複的值。hdu 1247 離線處理 這個題很蛋疼,不僅不告訴你字串的長度,而且ac 對於ab abab 這種情況的結果竟然是ab hdu 1671 順序插入即可,插入時判斷,是否存在其字...