樹是一種資料結構,它是由n(n>=1)個有限節點組成乙個具有層次關係的集合,把它叫做「樹」是因為它看起來像一棵倒掛的樹,根朝上,葉子向下。
樹的特點:
每個節點都有零個或多個子節點;
沒有父節點的節點稱為根節點;
每乙個非根節點有且僅有乙個父節點;
除了根節點外,每個子節點可以分為多個不相交的子樹;
二叉樹是樹的特殊的一種,具有如下特點:
每個節點最多有兩棵子樹,節點的度最大為2.
左子樹和右子樹是有順序的,次序不能顛倒。
即使某節點只有乙個子樹,也要區分左右子樹。
二叉樹是一種比較有用的這種方案,它新增、刪除元素都很快,並且在查詢方面也有很多的演算法優化,所以,二叉樹既有鍊錶的好處,也有陣列的好處,是兩者的優化方案,在處理大批量的動態資料方面非常有用。
佇列與棧一樣,它們都是一種線性表,但是他們也有不同之處,佇列可以在一端新增元素,另一端取出元素,也就是:先進先出。從一端放入元素的操作稱為入隊,取出元素為出隊。就好像我們排隊取票一樣。
使用場景:因為佇列先進先出的特點,在多執行緒阻塞佇列管理中非常適用。
陣列是可以在記憶體中連續儲存多個元素的結構,在記憶體中的分配也是連續的,陣列中的元素通過陣列下標進行訪問,陣列下標從0開始。例如下面這段**就是將陣列的第乙個元素賦值為1:
data = [10,12,3,41,5,6,64]
data[0] = 1
優點:
按照索引查詢元素速度快
按照索引遍歷陣列方便
缺點:陣列的大小固定後就無法擴容了;
陣列只能儲存一種型別的資料;
新增、刪除的操作慢,因為要移動其他的元素。
使用場景:頻繁查詢,對儲存空間的要求不大,很少增刪。
鍊錶是無力儲存單元上非連續的、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶的指標位址實現,每個元素包含兩個節點,乙個是儲存元素的資料域(記憶體空間),另乙個是指向下乙個節點位址的指標域。根據指標的指向,鍊錶能形成不同的結構,例如單鏈表,雙向鍊錶,迴圈鍊錶等。
鍊錶的優點:鍊錶是很常用的一種資料結構,不需要初始化容量,可以任意加減元素;
新增或者刪除時只需要改變前後兩個元素節點的指標域指向位址即可,所以新增、刪除很快;
缺點:因為含有大量的指標域,占用空間較大;
查詢元素需要遍歷鍊錶來查詢,非常耗時。
使用場景:資料量較小,需要頻繁增加、刪除操作的場景
雜湊表也叫雜湊表,是根據關鍵碼和值直接進行訪問的資料結構,通過key和value來對映到集合中的乙個位置,這樣就可以很快找到集合中的對應元素。
圖是由結點的有窮集合v和邊的集合e組成。其中,為了與樹形結構加以區別,在圖結構中常常將結點稱為頂點,邊是頂點的有序偶對,若兩個頂點之間存在一條邊,就表示這兩個頂點具有相鄰關係。按照頂點指向的方向可分為無向圖和有向圖.
圖是一種比較複雜的資料結構,在儲存資料上有著比較複雜和高效的演算法,分別有鄰接矩陣、鄰接表、十字鍊錶、鄰表多重表、邊集陣列等儲存結構。
堆是一種比較特殊的資料結構,可以被看做一棵陣列物件,具有以下的性質:
將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。常見的堆有二叉堆、斐波那契堆等。
堆的定義如下:n個元素的序列當且僅當滿足下關係時,稱之為堆。
(ki<=k2i,ki<=k2i+1)或者(ki>=k2i,ki>=k2i+1),(i=1,2,3,4,…n/2),滿足前者的表示式的稱為小頂堆,滿足後者表示式的為大頂堆,這兩者的結構圖可以用完全二叉樹排列出來。
因為堆有序的特點,一般用來做陣列中的排序,稱為堆排序。
八大資料結構
八大資料型別 public class demo04 布林值拓展 boolean flag true if flag true 新手 if flag 老手 lsee is more 要精簡易讀轉義字元 t 製表符 n 換行 system.out.println hello nworld 字元轉義為數...
資料結構八大排序
不穩定排序 一 選擇排序 例如 4 1 8 21 0 i j 0 4 8 21 1 將i的值存放到minindex中 arr j tmp 比較minindex和tmp的值 最後互換 void select sort int arr,int len 三 直接插入排序 穩定的演算法 無序 o n 2 有...
資料結構八大排序演算法
常見的八大排序演算法,他們之間關係如下 直接插入排序 definsert sort l 遍歷陣列中的所有元素,其中0號索引元素預設已排序,因此從1開始 for x in range 1 len l 將該元素與已排序好的前序陣列依次比較,如果該元素小,則交換 range x 1,1,1 從x 1倒序迴...