1、紅黑樹的結構體解讀
struct rb_node
__attribute__((aligned(sizeof(long))));
這個是linux核心紅黑樹的基礎結構,注意這裡的__attribute__((aligned(sizeof(long))));如果是在32位機器上的話,那麼這個就是4位元組對齊,rb_node的首位址必然是4的倍數,而rb_parent_color是乙個指向rb_node結構的指標,所以如果rb_parent_color表示位址的話也一定是4的倍數,那麼必然最後兩位是0,所以最後1個bit就可以拿出來做表示顏色了,省記憶體就是這麼來的。
2、基本顏色操作函式
#define rb_parent(r) ((struct rb_node *)((r)->rb_parent_color & ~3))
#define rb_color(r) ((r)->rb_parent_color & 1)
#define rb_is_red(r) (!rb_color(r))
#define rb_is_black(r) rb_color(r)
#define rb_set_red(r) do while (0)
#define rb_set_black(r) do while (0)
通過以上結構體的分析,這個顏色的基本操作研究可以理解了,直接與1進行&操作或|操作就可以的到最後乙個bit表示的顏色值了。
後面待續-------------------------------
linux紅黑樹實現
linux核心紅黑樹的演算法都定義在linux 2.6.38.8 include linux rbtree.h和linux 2.6.38.8 lib rbtree.c兩個檔案中。1 結構體 cpp view plain copy print?struct rb node attribute alig...
linux紅黑樹使用
紅黑樹的是在排序而叉樹的基礎上加了如下約束 1 每個節點或者是黑色,或者是紅色 2 根節點是黑色 3 如果乙個節點是紅色的,則它的子節點必須是黑色的 4 從乙個節點到任一葉子所有路徑上包含相同數目的黑節點 linux核心紅黑樹實現 指向一顆紅黑樹 struct rb root 節點結構 struct...
紅黑樹下 紅黑樹的實現
1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...