STL源码剖析 关联式容器 树 红黑树、二叉搜索树、平衡二叉搜索树
生活随笔
收集整理的這篇文章主要介紹了
STL源码剖析 关联式容器 树 红黑树、二叉搜索树、平衡二叉搜索树
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
- ?所謂關(guān)聯(lián)式容器,觀念上類(lèi)似關(guān)聯(lián)式數(shù)據(jù)庫(kù)(實(shí)際上則簡(jiǎn)單許多):每筆數(shù)據(jù)(每個(gè)元素)都有一個(gè)鍵值(key)和一個(gè)實(shí)值(value) 2。當(dāng)元素被插入到關(guān)聯(lián)式 容器中時(shí),容器內(nèi)部結(jié)構(gòu)(可能是RB-tree,也可能是hash-table)便依照其鍵 值大小,以某種特定規(guī)則將這個(gè)元素放置于適當(dāng)位置.
- 關(guān)聯(lián)式容器沒(méi)有所謂頭尾(只有最大元素和最小元素),所以不會(huì)有所謂push_back()、push_f ront ()、 pop_back()、pop_f ront () . begin。、end() 這樣的操作行為。
- 一般而言,關(guān)聯(lián)式容器的內(nèi)部結(jié)構(gòu)是一個(gè)balanced binary tree (平衡二叉樹(shù)),以便獲得良好的搜尋效率.balanced binary tree有許多種類(lèi)型,包 括 AVL-tree.RB-tree、AA-tree,其中最被廣泛運(yùn)用于S T L 的是RB-tree (紅黑樹(shù))。為了探討 S T L 的關(guān)聯(lián)式容器,我必須先探討RB-tree.
- size 節(jié)點(diǎn)數(shù)量,包含自身
- height 葉子節(jié)點(diǎn)是0,逐個(gè)向上遞增
- depth 根節(jié)點(diǎn)是0,逐個(gè)向下遞增
- length 從根節(jié)點(diǎn)到 計(jì)算節(jié)點(diǎn)之間的邊的個(gè)數(shù)
二叉搜索數(shù)
?
?
?
?
?
?源碼這一塊 已經(jīng)懵逼
?類(lèi)似鏈表中的dummptynode,他的作用使得 對(duì)于頭結(jié)點(diǎn)的操作和其余的節(jié)點(diǎn)操作是一致的
- ?接下來(lái),每當(dāng)插入新節(jié)點(diǎn)時(shí),不但要依照RB-tree的規(guī)則來(lái)調(diào)整,并且維護(hù) header的正確性,使其父節(jié)點(diǎn)指向根節(jié)點(diǎn),左子節(jié)點(diǎn)指向最小節(jié)點(diǎn),右子節(jié)點(diǎn)指 向最大節(jié)點(diǎn)。節(jié)點(diǎn)的插入所帶來(lái)的影響,是下一小節(jié)的描述重點(diǎn)。
?
?
?左右子樹(shù)高度相差為2時(shí),會(huì)進(jìn)行平衡,賦值僅僅改變顏色即可
?
總結(jié)
以上是生活随笔為你收集整理的STL源码剖析 关联式容器 树 红黑树、二叉搜索树、平衡二叉搜索树的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 密码学专题 口令输入的方式
- 下一篇: STL源码剖析 slist单向链表概述