程式設計中常常會遇到已有的資料結構無法解決問題,這時不要急著建立新的資料結構,可以在已有資料結構的基礎上新增新的字段。本節在紅黑樹這一基礎資料結構上進行擴充套件,得出兩個重要的應用—動態順序統計和區間樹。
一種支援一般動態集合上順序統計操作的資料結構。通過這種資料結構,可以快速找到乙個集合中的第i小的數,(select)或給出乙個指定元素在集合的全序中的位置。(rank)
【思想】新增新項:在紅黑樹的結點上記錄下該結點的子樹個數。size[x] = size[left[x]] + size[right[x]] +1。 若結點為空,則為0。
此外當你對該擴充套件的資料結構進行插入和刪除操作時,需隨時更新子樹的大小,與插入和刪除操作同步進行,但是需要重新使其回到平衡。主要在於case2和case3這兩種情況的旋轉。《可以與演算法系列筆記4>紅黑樹的插入**進行對比,看修改情況。
**:返回第i 排名的元素os_select(i)
bstnode* osrbtree::os_select(bstnode *p, const int &ith)
if(ith == k) return p;
if(ith < k) return os_select(p->left, ith);
else return os_select(p->right, i
資料結構迴圈佇列的自動擴充容量
define true 1 define false 0 define ok 1 define error 0 typedef int qelemtype typedef int status 1.初始化佇列 status initqueue sqqueue q 2.入隊操作 當rear的標號大於f...
資料結構 向量的擴充(分攤複雜度分析)
在原本的向量中,由於採用靜態空間管理策略 開闢內部陣列 elem並使用一段連續的物理空間 capacity 總容量 size 當前實際規模 這個管理策略顯然存在不足,會發生上溢或者下溢 1 上溢 overflow elem不足以存放所有元素 2 下溢 underflow elem中元素寥寥無幾 裝填...
資料結構 資料結構的概述
一 概述 什麼是資料結構 資料 由有限的符號 比如,0 和 1 具有其自己的結構 操作 和相應的語義 組成的元素的集合。結構 元素之間的關係的集合。資料結構 資訊的一種組織方式,其目的是為了提高演算法的效率,它通常與一組演算法的集合相對應,通過這組演算法集合可以對資料結構中的資料進行某種操作。它用來...