ngx_rbtree_t紅黑樹
紅黑樹的特性
<code><span>typedef</span> ngx_uint_t ngx_rbtree_key_t; <span>typedef</span><span>struct</span> ngx_rbtree_node_s ngx_rbtree_node_t; <span>struct</span><span>struct</span> ngx_rbtree_node_s { <span>//无符号整型关键字</span> ngx_rbtree_key_t key; <span>//左子节点</span> ngx_rbtree_node_t *left; <span>//右子节点</span> ngx_rbtree_node_t *right; <span>//父节点</span> ngx_rbtree_node_t *parent; <span>//节点的颜色,0:黑,1:红</span> u_char color; <span>//仅一字节的数据</span> u_char data; };</code>將這樣的樹節點放在元素的第一個成員位置,這樣方便直接強制轉換。
i.e.
<code><span>typedef</span><span>struct</span> { ngx_rbtree_node_t node; ngx_uint_t num; }TestRBTreeBode;</code>
紅黑樹節點提供的函數
參數 | node是ngx_rbtree_node_t類型的節點指針 | 設定node為紅色 |
---|---|---|
node是ngx_rbtree_node_t類型的節點指標 | 值node為黑色 | _rbtree_node_t類型的節點指標判斷node是否為紅色 |
ngx_rbt_is_black(node) | node是ngx_rbtree_node_t類型的節點指標 | 判斷是否為黑色 |
將n2的節點顏色複製給n1 | ngx_rbtree_node_t *ngx_rbtree_min(node,sentinel) | |
node同上 | 初始化哨兵節點 | |
紅黑樹結構體 | <code><span>typedef</span><span>struct</span> ngx_rbtree_s ngx_rbtree_t; <span>/* 为解决不同节点含有相同关键字的元素冲突问题所存在的指针*/</span><span>typedef</span><span>void</span> (*ngx_rbtree_insert_pt)(ngx_rbtree_node_t *root,ngx_rbtree_node_t *node,ngx_rbtreenode_t *sentinel); <span>struct</span> ngx_rbtree_s { <span>//指向树的根节点(可以直接强制转化为数据元素)</span> ngx_rbtree_node_t *root; <span>//指向NIL哨兵节点</span> ngx_rbtree_node_t *sentinel; <span>//红黑树添加元素的指针</span> ngx_rbtree_insert_pt insert; };</code> | 紅黑樹容器提供的函數義字|
ngx_rbtree_init(tree,s,i) | tree是容器指標;s是哨兵指標;i是ngx_rbtree_insert_pt型別的新增函數 | 初始化紅黑樹 |
tree同上;node是新增的節點指標 | 新增節點,自動旋轉保持特性 |
; ,自動旋轉保持特性
版權聲明:Pain is just in your mind. | 以上就介紹了ngx_rbtree_t紅黑樹,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。 |
---|