核心資料結構之紅黑樹

2021-06-05 10:48:56 字數 1081 閱讀 1528

紅黑樹是一種自平衡的二叉查詢樹,是linux主要的二叉樹結構。紅黑樹有乙個特殊的顏色屬性,要麼紅色,要麼黑色。紅黑樹通過強制以下條件來保證紅黑樹仍然是半平衡的。

上述屬性表明,最深的葉子的深度不會超過最淺的葉子的深度的二倍。這樣,該樹總是半平衡的。

在linux中,紅黑樹稱為rbtree。分別宣告和定義在和lib/rbtree.c中。乙個rbtree的根總是由結構rb_root來表示。為了建立乙個新的紅黑樹,我們要分配乙個新的rb_root並將其初始化為特殊值rb_root:

struct rb_root root = rb_root。

單個結點由結構rb_node來表示。由於c語言不支援泛型程式設計,所以rbtree並沒有提供查詢和插入程式,程式設計人員必須自行定義,不過可以使用rbtree已經提供的一些幫助函式。

紅黑樹查詢程式實現的乙個例子

struct page * rb_search_page_cache(struct inode *inode,

unsigned long offset)

return null; }

紅黑樹插入程式實現的乙個例子

structpage * rb_insert_page_cache(struct inode *inode,

unsignedlong offset,

structrb_node *node)

rb_link_node(node,parent, p);

rb_insert_color(node,&inode->i_rb_page_cache);

returnnull; }

總結:何時,何地使用什麼資料結構?

如果,主要的操作是迭代訪問資料,使用鍊錶。當效能不是很重要時,也可考慮使用鍊錶。當資料專案總數相對較少時,或需要與其他核心**進行互動時,使用鍊錶。

如果**符合生產者/消費者模式,使用佇列,特別是你想要乙個固定大小的緩衝區。

如果需要將乙個uid對映到乙個物件,使用對映。

如果需要儲存大量的資料並要有效地查詢資料,使用紅黑樹。但是如果這些操作不是對時間要求很高的,那麼最好用鍊錶。

資料結構之紅黑樹

定義 紅黑樹是一顆二叉查詢樹,樹中結點顏色或為紅色或為黑色,且滿足如下條件 根結點和所有外結點的顏色為黑色 根結點到任意乙個外結點的路徑上沒有連續的兩個紅色結點,若乙個結點是紅色,則其兩個兒子結點都是黑色 根結點到任意外結點的路徑上都有相同數目的黑色結點。1 插入操作 插入操作可以概括為以下幾個步驟...

資料結構 紅黑樹

紅黑樹是二叉排序樹的改進,紅黑樹有幾個特點 1 節點只有2中顏色,紅色和黑色。2 根節點一定是黑色節點。3 紅色節點的子節點一定是黑色節點。4 黑色高度 根節點到每個葉子節點的路徑長度包含相同的黑色節點 相等。規定的插入的節點一定是紅色節點,紅黑樹的插入節點後需要調整的規則,插入節點需要調整的情況有...

資料結構 紅黑樹

一 紅黑樹 紅黑樹 red black tree 是一種自平衡二叉查詢樹,是在 電腦科學中用到的一種 資料結構 典型的用途是實現 關聯陣列 可以保證最長路徑不超過最短路徑的2倍,近似平衡。二 性質 性質1.節點是紅色或黑色。性質2.根節點是黑色。性質3 每個葉節點 nil節點,空節點 是黑色的。性質...