linux紅黑樹解讀

2021-06-18 11:38:21 字數 754 閱讀 2556

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.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...