平衡红/黑树
对于已排序的容器在运行时可能变得很大的情况,由于搜索它的算法成本,列表就会出现问题。对于这些情况,Zephyr提供了一个平衡树实现,它对大小为N的树的O(log2(N))的搜索和删除操作有运行时。这是使用传统的多个学术来源描述的红/黑树实现的。
rbtree
的rbtree
跟踪结构可以在用户可访问内存中的任何位置初始化。在第一次使用之前,它应该只包含零位。不需要或特定的初始化API。
与位置是显式的列表不同,rbtree
中节点的排序必须由用户作为谓词函数提供。在尝试任何树操作之前,应该将类型为rb_lessthan_t()
的函数分配给:c:结构体`rbtree
`结构体的lessthan_fn
字段。顾名所义,如果第一个节点参数按照树所期望的顺序“小于”第二个节点参数,那么这个函数应该返回一个布尔值True值。注意,“不允许是相等的,树中的节点必须有一个固定的顺序,算法才能正确工作。
与slist
和dlist
容器一样,rbtree
中的节点被表示为存在于用户管理内存中的rbnode
结构,通常嵌入在树中被跟踪的数据结构中。与列表代码不同,rbnode<