核心紅黑樹使用範例

2021-09-06 09:01:52 字數 1832 閱讀 2672

核心中的紅黑樹只是提供了乙個管理機制,並沒有提供具體的使用介面。需要使用者根據自己的使用環境去定義和實現自己的關鍵字(char,uchar, int, uint等型別)操作。這樣可以更加靈活。

像核心中的鍊錶,hash表的**都是這種思想。

1

struct

mytype

2; 78

struct mytype *my_find(struct rb_root *root, int

num) 9

2223

return

null;

24}

2526

27int my_insert(struct rb_root *root, struct mytype *data)

28

4445

/*add new node and rebalance tree.

*/46 rb_link_node(&data->my_node, parent, tmp);

47 rb_insert_color(&data->my_node, root);

4849

return

0;

50}

5152

53void my_delete(struct rb_root *root, int

num)

5461

} 62

63void my_destory(struct rb_root *tree)

6471}72

73void my_printf(struct rb_root *tree)

7481

82 printf("\n"

);

83}

8485

86#define rbtree_max_num 10

8788

int main(int argc, char *argv)

89104

105 tmp->num = rand()%100

;106

107 printf("

%d ", tmp->num);

108109

int ret = my_insert(&mytree, tmp);

110if (ret < 0

) 111

115}

116117 printf("\n"

);118

119 my_printf(&mytree);

120121

char buf[10

];122

123while(1

)124

137else

if(buf[0] == '+'

)138

145146 tmp->num = atoi(&buf[1

]);147

148int ret = my_insert(&mytree, tmp);

149if (ret < 0

) 150

154}

155else

if(buf[0] == '-'

)156

159else

160163

164 my_printf(&mytree);

165166

}167

168 my_destory(&mytree);

169170

return

0;

171 }

紅黑樹核心原理

紅黑樹是一種近似平衡的二叉查詢樹,它能夠確保任何乙個節點的左右子樹的高度差不會超過二者中較低那個的一陪。具體來說,紅黑樹是滿足如下條件的二叉查詢樹 binary search tree 每個節點要麼是紅色,要麼是黑色。根節點必須是黑色 紅色節點不能連續 也即是,紅色節點的孩子和父親都不能是紅色 對於...

linux紅黑樹使用

紅黑樹的是在排序而叉樹的基礎上加了如下約束 1 每個節點或者是黑色,或者是紅色 2 根節點是黑色 3 如果乙個節點是紅色的,則它的子節點必須是黑色的 4 從乙個節點到任一葉子所有路徑上包含相同數目的黑節點 linux核心紅黑樹實現 指向一顆紅黑樹 struct rb root 節點結構 struct...

Linux 核心中的紅黑樹

紅黑樹是平衡二叉樹的一種,它有很好的性質,樹中的結點都是有序的,而且因為它本身就是平衡的,所以查詢也不會出現非常惡劣的情況,基於二叉樹的操作的時間複雜度是o log n linux 核心在管理vm area struct 時就是採用了紅黑樹來維護記憶體塊的。先到include linux rbtre...