linux紅黑樹使用

2021-08-13 07:54:46 字數 854 閱讀 8997

紅黑樹的是在排序而叉樹的基礎上加了如下約束:

1:每個節點或者是黑色,或者是紅色

2:根節點是黑色

3:如果乙個節點是紅色的,則它的子節點必須是黑色的

4:從乙個節點到任一葉子所有路徑上包含相同數目的黑節點

linux核心紅黑樹實現:

指向一顆紅黑樹:

struct rb_root

;節點結構:

struct rb_node

__attribute__((aligned(sizeof(long))));

插入乙個節點,然後紅黑樹結構會不符合定義,需要再呼叫rb_insert_color;

static inline void rb_link_node(struct rb_node * node, struct rb_node * parent,

struct rb_node ** rb_link)

紅黑樹的構造過程

新建乙個根節點:

struct rb_node root;struct rb_root ptree;

rb_link_node(&root, null, &ptree.rb_node);

插入乙個節點

先通過紅黑的排序二叉樹結構 找到新節點要插入的那個葉子節點,確定新節點的父節點

呼叫 rb_link_node( &node_9, &node_8, &(node_8.rb_right))

再呼叫rb_insert_color(&node_9, &node_root_10);

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 紅黑樹的結構體解讀 struct rb node attribute aligned sizeof long 這個是linux核心紅黑樹的基礎結構,注意這裡的 attribute aligned sizeof long 如果是在32位機器上的話,那麼這個就是4位元組對齊,rb node的首位址必...

核心紅黑樹使用範例

核心中的紅黑樹只是提供了乙個管理機制,並沒有提供具體的使用介面。需要使用者根據自己的使用環境去定義和實現自己的關鍵字 char,uchar,int,uint等型別 操作。這樣可以更加靈活。像核心中的鍊錶,hash表的 都是這種思想。1 struct mytype 2 78 struct mytype...