資料結構_鍊錶
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...