mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-07-03 07:46:53 +08:00
tree接口函数修改
This commit is contained in:
parent
e49add3f16
commit
23fc67cb49
@ -38,8 +38,7 @@ void demo_avltree_num(void)
|
|||||||
int temp = 0;
|
int temp = 0;
|
||||||
uint32_t len = sizeof(data) / sizeof(data[0]);
|
uint32_t len = sizeof(data) / sizeof(data[0]);
|
||||||
|
|
||||||
tree_t tree = tree_new();
|
tree_t tree = tree_avl_new(sizeof(int));
|
||||||
tree_avl_init(tree, sizeof(int));
|
|
||||||
tree->print_obj = print_num;
|
tree->print_obj = print_num;
|
||||||
tree->compare = compare_num;
|
tree->compare = compare_num;
|
||||||
|
|
||||||
@ -210,8 +209,7 @@ void demo_rbtree_num(void)
|
|||||||
int temp = 0;
|
int temp = 0;
|
||||||
uint32_t len = sizeof(data) / sizeof(data[0]);
|
uint32_t len = sizeof(data) / sizeof(data[0]);
|
||||||
|
|
||||||
tree_t tree = tree_new();
|
tree_t tree = tree_rb_new(sizeof(int));
|
||||||
tree_rb_init(tree, sizeof(int));
|
|
||||||
tree->print_obj = print_num;
|
tree->print_obj = print_num;
|
||||||
tree->compare = compare_num;
|
tree->compare = compare_num;
|
||||||
|
|
||||||
@ -342,8 +340,7 @@ void demo_rbtree_struct(void)
|
|||||||
struct _student temp = {0};
|
struct _student temp = {0};
|
||||||
uint32_t len = sizeof(data) / sizeof(data[0]);
|
uint32_t len = sizeof(data) / sizeof(data[0]);
|
||||||
|
|
||||||
tree_t tree = tree_new();
|
tree_t tree = tree_rb_new(sizeof(struct _student));
|
||||||
tree_rb_init(tree, sizeof(struct _student));
|
|
||||||
tree->print_obj = print_struct;
|
tree->print_obj = print_struct;
|
||||||
tree->compare = compare_struct;
|
tree->compare = compare_struct;
|
||||||
|
|
||||||
|
@ -125,11 +125,10 @@ struct _tree
|
|||||||
};
|
};
|
||||||
typedef struct _tree* tree_t;
|
typedef struct _tree* tree_t;
|
||||||
|
|
||||||
// bst_tree
|
// create and free tree
|
||||||
bool tree_avl_init(struct _tree *self, uint32_t obj_size);
|
tree_t tree_avl_new(uint32_t obj_size);
|
||||||
bool tree_rb_init(struct _tree *self, uint32_t obj_size);
|
tree_t tree_rb_new(uint32_t obj_size);
|
||||||
|
|
||||||
tree_t tree_new(void);
|
|
||||||
void tree_free(tree_t* tree);
|
void tree_free(tree_t* tree);
|
||||||
|
|
||||||
#endif // _TREE_H_
|
#endif // _TREE_H_
|
||||||
|
82
src/tree.c
82
src/tree.c
@ -128,7 +128,7 @@ static struct _tree_node* tree_turn_right_then_left(struct _tree* self, struct _
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t tree_height(struct _tree* self, struct _tree_node* root)
|
static int32_t tree_height(struct _tree* self, struct _tree_node* root)
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
@ -384,7 +384,7 @@ struct _tree_node* tree_find_pos(struct _tree* self, void* obj)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool tree_avl_insert(struct _tree* self, void* obj)
|
static bool tree_avl_insert(struct _tree* self, void* obj)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
assert(obj != NULL);
|
assert(obj != NULL);
|
||||||
@ -506,7 +506,7 @@ static bool tree_avl_delete_double_child(struct _tree* self, struct _tree_node*
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tree_avl_delete(struct _tree* self, void* obj)
|
static bool tree_avl_delete(struct _tree* self, void* obj)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
assert(obj != NULL);
|
assert(obj != NULL);
|
||||||
@ -538,7 +538,7 @@ bool tree_avl_delete(struct _tree* self, void* obj)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct _tree_node* tree_find(struct _tree* self, void* obj)
|
static struct _tree_node* tree_find(struct _tree* self, void* obj)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
struct _tree_node* root = self->_root;
|
struct _tree_node* root = self->_root;
|
||||||
@ -560,7 +560,7 @@ struct _tree_node* tree_find(struct _tree* self, void* obj)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tree_clear(struct _tree* self)
|
static bool tree_clear(struct _tree* self)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
if (self->_root == NULL)
|
if (self->_root == NULL)
|
||||||
@ -592,20 +592,20 @@ bool tree_clear(struct _tree* self)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tree_empty(struct _tree* self)
|
static bool tree_empty(struct _tree* self)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
return !self->size(self);
|
return !self->size(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t tree_size(struct _tree* self)
|
static uint32_t tree_size(struct _tree* self)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
return self->_size;
|
return self->_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
// free
|
// free
|
||||||
void tree_destory(struct _tree* self)
|
static void tree_destory(struct _tree* self)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
self->clear(self);
|
self->clear(self);
|
||||||
@ -621,13 +621,13 @@ void tree_destory(struct _tree* self)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tree_order(struct _tree* self, bool right_priority)
|
static void tree_order(struct _tree* self, bool right_priority)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
self->_right_priority = right_priority;
|
self->_right_priority = right_priority;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tree_preorder(struct _tree* self, struct _tree_node* root)
|
static void tree_preorder(struct _tree* self, struct _tree_node* root)
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
@ -710,7 +710,7 @@ void tree_preorder(struct _tree* self, struct _tree_node* root)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void tree_inorder(struct _tree* self, struct _tree_node* root)
|
static void tree_inorder(struct _tree* self, struct _tree_node* root)
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
@ -794,7 +794,7 @@ void tree_inorder(struct _tree* self, struct _tree_node* root)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void tree_postorder(struct _tree* self, struct _tree_node* root)
|
static void tree_postorder(struct _tree* self, struct _tree_node* root)
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
@ -889,7 +889,7 @@ void tree_postorder(struct _tree* self, struct _tree_node* root)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// traversal breadth
|
// traversal breadth
|
||||||
void tree_breadth(struct _tree* self, struct _tree_node* root)
|
static void tree_breadth(struct _tree* self, struct _tree_node* root)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
if (root == NULL)
|
if (root == NULL)
|
||||||
@ -992,7 +992,7 @@ static struct _tree_node* tree_find_max(struct _tree* self, struct _tree_node* r
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tree_min(struct _tree* self, void* obj)
|
static bool tree_min(struct _tree* self, void* obj)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
struct _tree_node* node = tree_find_min(self, self->_root);
|
struct _tree_node* node = tree_find_min(self, self->_root);
|
||||||
@ -1004,7 +1004,7 @@ bool tree_min(struct _tree* self, void* obj)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tree_max(struct _tree* self, void* obj)
|
static bool tree_max(struct _tree* self, void* obj)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
struct _tree_node* node = tree_find_max(self, self->_root);
|
struct _tree_node* node = tree_find_max(self, self->_root);
|
||||||
@ -1018,13 +1018,13 @@ bool tree_max(struct _tree* self, void* obj)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
rbt_color tree_color(struct _tree_node* node)
|
static rbt_color tree_color(struct _tree_node* node)
|
||||||
{
|
{
|
||||||
assert(node != NULL);
|
assert(node != NULL);
|
||||||
return node->color;
|
return node->color;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tree_set_color(struct _tree_node* node, rbt_color color)
|
static bool tree_set_color(struct _tree_node* node, rbt_color color)
|
||||||
{
|
{
|
||||||
assert(node != NULL);
|
assert(node != NULL);
|
||||||
node->color = color;
|
node->color = color;
|
||||||
@ -1106,7 +1106,7 @@ static struct _tree_node* tree_rb_turn_right(struct _tree* self, struct _tree_no
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tree_rb_insert(struct _tree* self, void* obj)
|
static bool tree_rb_insert(struct _tree* self, void* obj)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
assert(obj != NULL);
|
assert(obj != NULL);
|
||||||
@ -1259,7 +1259,7 @@ static bool tree_rb_rebalance(struct _tree* self, struct _tree_node* node)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tree_rb_delete_fix(struct _tree* self, struct _tree_node* node)
|
static bool tree_rb_delete_fix(struct _tree* self, struct _tree_node* node)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
struct _tree_node* father = NULL;
|
struct _tree_node* father = NULL;
|
||||||
@ -1388,7 +1388,7 @@ bool tree_rb_delete_fix(struct _tree* self, struct _tree_node* node)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tree_rb_delete(struct _tree* self, void* obj)
|
static bool tree_rb_delete(struct _tree* self, void* obj)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
assert(obj != NULL);
|
assert(obj != NULL);
|
||||||
@ -1463,13 +1463,13 @@ bool tree_rb_delete(struct _tree* self, void* obj)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tree_set_order(struct _tree* self, enum _order order)
|
static void tree_set_order(struct _tree* self, enum _order order)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
self->_order = order;
|
self->_order = order;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* tree_begin(struct _tree* self)
|
static void* tree_begin(struct _tree* self)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
switch (self->_order)
|
switch (self->_order)
|
||||||
@ -1684,7 +1684,7 @@ void* tree_begin(struct _tree* self)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void* tree_next(struct _tree* self)
|
static void* tree_next(struct _tree* self)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
switch (self->_order)
|
switch (self->_order)
|
||||||
@ -1845,7 +1845,7 @@ void* tree_next(struct _tree* self)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void* tree_end(struct _tree* self)
|
static void* tree_end(struct _tree* self)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
switch (self->_order)
|
switch (self->_order)
|
||||||
@ -1888,9 +1888,7 @@ void* tree_end(struct _tree* self)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool tree_avl_init(struct _tree* self, uint32_t obj_size)
|
||||||
|
|
||||||
bool tree_avl_init(struct _tree* self, uint32_t obj_size)
|
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
|
|
||||||
@ -1949,7 +1947,7 @@ done:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tree_rb_init(struct _tree* self, uint32_t obj_size)
|
static bool tree_rb_init(struct _tree* self, uint32_t obj_size)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
self->_obj_size = obj_size;
|
self->_obj_size = obj_size;
|
||||||
@ -2006,9 +2004,33 @@ done:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tree_t tree_new(void)
|
tree_t tree_avl_new(uint32_t obj_size)
|
||||||
{
|
{
|
||||||
return (struct _tree*)malloc(sizeof(struct _tree));
|
tree_t tree = NULL;
|
||||||
|
tree = (struct _tree*)malloc(sizeof(struct _tree));
|
||||||
|
if(tree != NULL)
|
||||||
|
{
|
||||||
|
if(tree_avl_init(tree, obj_size) != true)
|
||||||
|
{
|
||||||
|
free(tree);
|
||||||
|
tree = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return tree;
|
||||||
|
}
|
||||||
|
tree_t tree_rb_new(uint32_t obj_size)
|
||||||
|
{
|
||||||
|
tree_t tree = NULL;
|
||||||
|
tree = (struct _tree*)malloc(sizeof(struct _tree));
|
||||||
|
if(tree != NULL)
|
||||||
|
{
|
||||||
|
if(tree_rb_init(tree, obj_size) != true)
|
||||||
|
{
|
||||||
|
free(tree);
|
||||||
|
tree = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return tree;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tree_free(tree_t* tree)
|
void tree_free(tree_t* tree)
|
||||||
|
@ -39,8 +39,7 @@ void test_avltree_num(void)
|
|||||||
int temp = 0;
|
int temp = 0;
|
||||||
uint32_t len = sizeof(data) / sizeof(data[0]);
|
uint32_t len = sizeof(data) / sizeof(data[0]);
|
||||||
|
|
||||||
tree_t tree = tree_new, ;
|
tree_t tree = tree_avl_new(sizeof(int));
|
||||||
tree_avl_init(tree, sizeof(int));
|
|
||||||
tree->print_obj = print_num;
|
tree->print_obj = print_num;
|
||||||
tree->compare = compare_num;
|
tree->compare = compare_num;
|
||||||
|
|
||||||
@ -211,8 +210,7 @@ void test_rbtree_num(void)
|
|||||||
int temp = 0;
|
int temp = 0;
|
||||||
uint32_t len = sizeof(data) / sizeof(data[0]);
|
uint32_t len = sizeof(data) / sizeof(data[0]);
|
||||||
|
|
||||||
tree_t tree = tree_new, ;
|
tree_t tree = tree_rb_new(sizeof(int));
|
||||||
tree_rb_init(tree, sizeof(int));
|
|
||||||
tree->print_obj = print_num;
|
tree->print_obj = print_num;
|
||||||
tree->compare = compare_num;
|
tree->compare = compare_num;
|
||||||
|
|
||||||
@ -343,8 +341,7 @@ void test_rbtree_struct(void)
|
|||||||
struct _student temp = { 0 };
|
struct _student temp = { 0 };
|
||||||
uint32_t len = sizeof(data) / sizeof(data[0]);
|
uint32_t len = sizeof(data) / sizeof(data[0]);
|
||||||
|
|
||||||
tree_t tree = tree_new, ;
|
tree_t tree = tree_rb_new(sizeof(struct _student));
|
||||||
tree_rb_init(tree, sizeof(struct _student));
|
|
||||||
tree->print_obj = print_struct;
|
tree->print_obj = print_struct;
|
||||||
tree->compare = compare_struct;
|
tree->compare = compare_struct;
|
||||||
|
|
||||||
@ -526,10 +523,8 @@ static void test_avltree_iter(void)
|
|||||||
int * iter = NULL;
|
int * iter = NULL;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
tree_t tree = tree_new();
|
tree_t tree = tree_avl_new(sizeof(int));
|
||||||
TEST_ASSERT_NOT_NULL(tree);
|
TEST_ASSERT_NOT_NULL(tree);
|
||||||
|
|
||||||
tree_avl_init(tree, sizeof(int));
|
|
||||||
tree->print_obj = print_num;
|
tree->print_obj = print_num;
|
||||||
tree->compare = compare_num;
|
tree->compare = compare_num;
|
||||||
|
|
||||||
@ -605,10 +600,9 @@ static void test_avltree_insert(void)
|
|||||||
int * iter = NULL;
|
int * iter = NULL;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
tree_t tree = tree_new();
|
tree_t tree = tree_avl_new(sizeof(int));
|
||||||
TEST_ASSERT_NOT_NULL(tree);
|
TEST_ASSERT_NOT_NULL(tree);
|
||||||
|
|
||||||
tree_avl_init(tree, sizeof(int));
|
|
||||||
tree->print_obj = print_num;
|
tree->print_obj = print_num;
|
||||||
tree->compare = compare_num;
|
tree->compare = compare_num;
|
||||||
|
|
||||||
@ -652,10 +646,9 @@ static void test_avltree_delete(void)
|
|||||||
int * iter = NULL;
|
int * iter = NULL;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
tree_t tree = tree_new();
|
tree_t tree = tree_avl_new(sizeof(int));
|
||||||
TEST_ASSERT_NOT_NULL(tree);
|
TEST_ASSERT_NOT_NULL(tree);
|
||||||
|
|
||||||
tree_avl_init(tree, sizeof(int));
|
|
||||||
tree->print_obj = print_num;
|
tree->print_obj = print_num;
|
||||||
tree->compare = compare_num;
|
tree->compare = compare_num;
|
||||||
|
|
||||||
@ -753,10 +746,9 @@ static void test_rbtree_iter(void)
|
|||||||
int * iter = NULL;
|
int * iter = NULL;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
tree_t tree = tree_new();
|
tree_t tree = tree_rb_new(sizeof(int));
|
||||||
TEST_ASSERT_NOT_NULL(tree);
|
TEST_ASSERT_NOT_NULL(tree);
|
||||||
|
|
||||||
tree_rb_init(tree, sizeof(int));
|
|
||||||
tree->print_obj = print_num;
|
tree->print_obj = print_num;
|
||||||
tree->compare = compare_num;
|
tree->compare = compare_num;
|
||||||
|
|
||||||
@ -832,10 +824,9 @@ static void test_rbtree_insert(void)
|
|||||||
int * iter = NULL;
|
int * iter = NULL;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
tree_t tree = tree_new();
|
tree_t tree = tree_rb_new(sizeof(int));
|
||||||
TEST_ASSERT_NOT_NULL(tree);
|
TEST_ASSERT_NOT_NULL(tree);
|
||||||
|
|
||||||
tree_rb_init(tree, sizeof(int));
|
|
||||||
tree->print_obj = print_num;
|
tree->print_obj = print_num;
|
||||||
tree->compare = compare_num;
|
tree->compare = compare_num;
|
||||||
|
|
||||||
@ -879,10 +870,9 @@ static void test_rbtree_delete(void)
|
|||||||
int * iter = NULL;
|
int * iter = NULL;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
tree_t tree = tree_new();
|
tree_t tree = tree_rb_new(sizeof(int));
|
||||||
TEST_ASSERT_NOT_NULL(tree);
|
TEST_ASSERT_NOT_NULL(tree);
|
||||||
|
|
||||||
tree_rb_init(tree, sizeof(int));
|
|
||||||
tree->print_obj = print_num;
|
tree->print_obj = print_num;
|
||||||
tree->compare = compare_num;
|
tree->compare = compare_num;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user