摘要: 内核中的红黑树只是提供了一个管理机制,并没有提供具体的使用接口。需要使用者根据自己的使用环境去定义和实现自己的关键字(char,uchar, int, uint等类型)操作。这样可以更加灵活。 像内核中的链表,hash表的代码都是这种思想。 1 struct mytype 2 { 3 int num; 4 5 struct rb_node my_node; 6 }; 7 8 struct mytype *my_find(struct rb_root *root, int num) 9 { 10 struct rb_no... 阅读全文
posted @ 2013-04-16 20:57 only_eVonne 阅读(834) 评论(0) 推荐(0) 编辑
摘要: 1 typedef struct st_rb_node { 2 /** 3 * 本结构体四字节对齐,因而其地址中低位两个bit永远是0。 4 * Linux内核开发人员非常爱惜内存,他们用其中一个空闲的位来存储颜色信息。 5 * parent_color成员实际上包含了父节点指针和自己的颜色信息。 6 */ 7 unsigned long parent_color; 8 #define RB_RED 0 9 #define RB_BLACK 1 10 struct st_rb_nod... 阅读全文
posted @ 2013-04-16 20:48 only_eVonne 阅读(2049) 评论(0) 推荐(0) 编辑
摘要: 转自http://www.cnblogs.com/zhangchaoyang红黑树RB-treeRB-tree是满足以下4个条件的二叉查找树:每个节点不是红色就是黑色根节点为黑色不能存在两个连续的红色节点任一节点至NULL(树尾端)的每一条路径上,所含黑节点的数目必须相同红黑树并不要求左右子树高度差控制在1以内,它的平衡条件比AVL树弱。然而红黑树通常能够导致良好的平衡状态,经验告诉我们,红黑树的平均搜索效率和AV-tree几乎相等,但是其插入节点的开销相对较低,实践中发生旋转的次数相对较少。以下所有操作,在新插入节点后,首先将新节点设为红色。按照二叉查找树的规则插入新节点后,如果新增节点的父 阅读全文
posted @ 2013-04-16 20:44 only_eVonne 阅读(245) 评论(0) 推荐(0) 编辑