自己实现的 rb-tree 准备用在我的网络库中

本文介绍了作者实现的红黑树数据结构,包括创建、查找、插入和删除等基本操作。该红黑树将用于作者的网络库,以优化数据存储和检索。文中详细展示了代码实现,并提及参考了《算法导论》来理解红黑树的原理。
摘要由CSDN通过智能技术生成

#ifndef RB_TREE_H_
#define RB_TREE_H_

typedef struct RB_TREE_NODE
{
 int color;
 unsigned long long key;
 void* data;
 struct RB_TREE_NODE* p;
 struct RB_TREE_NODE* left;
 struct RB_TREE_NODE* right;
} RB_TREE_NODE;

typedef struct RB_TREE
{
 RB_TREE_NODE* root;
 RB_TREE_NODE* nil;
} RB_TREE;

RB_TREE* rb_tree_create();

RB_TREE_NODE* rb_tree_find(RB_TREE* tree, unsigned long long key);

void rb_tree_insert(RB_TREE* tree, RB_TREE_NODE* node);

void rb_tree_delete(RB_TREE* tree, RB_TREE_NODE* node);

#endif /* RB_TREE_H_ */

 

 

#include "rb-tree.h"

#include <stdlib.h>
#include <stdio.h>

#define BLACK 0
#define RED  1

RB_TREE* rb_tree_create()
{
 RB_TREE* tree;

 tree = (RB_TREE*)malloc(sizeof(RB_TREE));
 tree->nil = (RB_TREE_NODE*)malloc(sizeof(RB_TREE_NODE));
 tree->nil->color = BLACK;
 tree->nil->p = NULL;
 tree->nil->left = NULL;
 tree->nil->right = NULL;
 tree->root = tree->nil;

 return tree;
}

RB_TREE_NODE* rb_tree_find(RB_TREE* tree, unsigned long long key)
{
 RB_TREE_NODE* node;

 node = tree->root;
 while(node != tree->nil)
 {
  if(node->key == key)
   break;
  if(node->key > key)
   node = node->left;
  else
   node = node->right;
 }

 return node;
}

void rb_tree_left_rotate(RB_TREE* tree, RB_TREE_NODE* node)
{
 RB_TREE_NODE* y = node->right;
 node->right = y->left;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值