資料結構的淺學習

2021-10-08 22:18:17 字數 1502 閱讀 2150

資料結構_鍊錶

1.查詢慢

2.增刪快

鍊錶中的每乙個元素也稱為乙個節點

乙個節點包含了乙個資料來源(儲存陣列),兩個指標域(儲存位址)

【自己的位址】【資料】【下乙個節點的位址】

單向鍊錶:鍊錶中只有一條鍊子,不能保證順序

雙向鍊錶:鍊錶中只有二條鍊子,保證順序

二叉樹:分支不能超過兩個

【排序樹/查詢樹】

在二叉樹的基礎上,元素是有大小順序的,左子樹小,右子樹大

【平衡樹】:左孩子和右孩子相等

【不平衡樹】

【紅黑樹】:趨近於平衡樹,查詢速度非常的快,查詢葉子節點最大次數和最小次數不能超過2倍

約束:1.節點可以是紅色的或者是黑色的

2.根節點是黑色的

3.葉子節點(空節點)是黑色的

4.每個紅色的節點的子節點都是黑色的

5.任何乙個節點到其每乙個葉子節點的所有路徑上黑色節點相同

前序:根左右

中序:左根右

後續:左右根

把乙個子樹作為乙個整體

查詢演算法:

暴力:遍歷

二分:前提條件:有序 b+樹的基礎演算法

雜湊:最高效o(1) jdk 1.8鍊錶加紅黑樹(處理hash衝突)

雜湊衝突的產生原因

雜湊是通過對資料進行再壓縮,提高效率的一種解決方法。但由於通過雜湊函式產生的雜湊值是有限的,而資料可能比較多,導致經過雜湊函式處理後仍然有不同的資料對應相同的雜湊值。這時候就產生了雜湊衝突。

插值:索引:搜尋索引

bfs&dfs:

平衡樹:

b+樹:

b-tree:

紅黑樹:高效的查詢:

底層資料結構:特殊的查詢樹(自平衡的二叉查詢樹)

1.每個節點不是紅色就是黑色

2.不可能有連在一起的」紅色「節點

3.根節點都是黑色

4.每個紅色結點的兩個子節點都是黑色,葉子節點都是黑色;

出度為0滿足了性質就可以近似的平衡,不一定要紅黑,可以為其他的

變化規則

1.變顏色(父節點,叔叔節點,祖父節點變色)

當前節點的父親是紅色,且它的祖節點的另乙個子節點也是紅色(叔叔節點)

2.旋轉(左旋,右旋):

左旋:右子樹 父節點是紅色,叔叔節點黑色 以父節點作為左旋

右旋:父節點紅色,叔叔黑色,右旋

缺點:1.讀取磁碟的次數過多

b樹:b-tree,b+tree balance tree

b樹 n叉的排序樹

1.節點最多含有m顆子樹(指標)m-1個關鍵字(資料)

2.除根節點和葉子節點外,其他每個節點至少有ceil(m/2)個子節點

3.若根節點不是葉子節點,則至少有兩顆子樹

4.ceil為取數 當資料=時**從中間分開,分成兩顆子樹

n》= ceil(m/2)

b+樹(雙向鍊錶) 有利於範圍查詢

1.葉子節點連起來了

2.非葉子節點不存資料

3.資料和節點一樣多

學習資料結構

佇列 queue 先進先出 fifo queue.push為入隊,pueue.shift為出隊,由這兩項組成佇列 棧 stack 後進先出 lifo 順序儲存資料 鍊錶linked list 雙向鍊錶 每個節點有乙個previous指向上乙個節點 迴圈鍊錶 最後乙個節點的next指向頭節點 定義 是...

資料結構 學習資料結構的學習筆記之串

計算機中對非數值處理基本上為字串資料,對於字串的處理要比數值處理難度大,因而更為重要!串的定義 長度 相等等就不提啦。對串的最小操作集是 1 串賦值 strassgin 2 串比較 strcompare 3 求串長 strlength 4 串聯接 concat 5 求字串 substring 其他操...

資料結構 map的學習

main.cpp map使用 created by 劉鑫偉 on 14 7 25.include include includeusing namespace std int main 清空map中的資料可以用clear 函式,判定map中是否有資料可以用empty 函式,它返回true則說明是空m...