RB-Tree(红黑树,Red-Back Tree)的C语言算法实现

2024-04-27 03:32

本文主要是介绍RB-Tree(红黑树,Red-Back Tree)的C语言算法实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

源文件:red_back_tree.h

#ifndef _RED_BACK_TREE
#define _RED_BACK_TREE
#include <iostream.h>
#define BLACK 0
#define RED 1
typedef struct _RBNode{
int key;
int color;
struct _RBNode *parent, *leftchild, *rightchild;
} RBNode,*RBTree;
static RBNode _Nil = {0, BLACK, NULL, NULL, NULL};
const static RBTree Nil = &_Nil;
#define EQ(x, y)  ((x)->key==(y)->key)
#define LT(x, y) ((x)->key < (y)->key)
#define RBTREE_SIZE sizeof(RBNode) 
/* 根据关键字集合创建RBTree */
int create_RBTree(RBTree &T, int keys[], int n);
/* 左旋 */
void L_Rote(RBTree &T, RBTree x);
/* 右旋 */
void R_Rote(RBTree &T, RBTree x);
/* 将新节点插入到RBTree中 */
int insert_to_RBTree(RBTree &T, RBTree node);
/* 调整插入T的z结点 */
void fixup_insert_RBTree(RBTree &T, RBTree z);
/* 找到关键字所对应的节点 */
RBTree find_RBTree(const RBTree T, int key);
/* 删除z元素,并返回真正被删除结点的指针。要求z为T中一存在的结点~ */
RBTree delete_from_RBTree(RBTree &T, RBTree z);
/* 删除以key为关键字的结点,~若成功,则返回1,否则返回0. */
int delete_from_RBTree(RBTree &T, int key);
/* 当删除x的原父亲之后,调整x */
void fixup_delete_RBTree(RBTree &T, RBTree x);
/* 先序遍历RBTree */
void pre_order_RBTree(const RBTree T);
void _pre_order_RBTree(const RBTree T);
#endif


 

源代码:red_back_tree.cpp

#include "red_back_tree.h"
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
#include <memory.h>
int create_RBTree(RBTree &T, int keys[], int n)
{
RBTree p = NULL;
for(int i = 0; i < n; i++)
{
if(!(p=(RBTree) malloc (RBTREE_SIZE)))
{
exit(-1);
}
p->leftchild = p->rightchild = Nil;
p->key = keys[i];
insert_to_RBTree(T, p);
pri

这篇关于RB-Tree(红黑树,Red-Back Tree)的C语言算法实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/939409

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引发了我们的广泛关注。从训练和操作的角度来看,LLMs 可以被认为是一种巨大的、非真实的记忆库,相当于为我们所有人提供了一个外部的系统 1(见图 1)。然而,它们表面上的多功能性让许多研究者好奇,这些模型是否也能在通常需要系

通过SSH隧道实现通过远程服务器上外网

搭建隧道 autossh -M 0 -f -D 1080 -C -N user1@remotehost##验证隧道是否生效,查看1080端口是否启动netstat -tuln | grep 1080## 测试ssh 隧道是否生效curl -x socks5h://127.0.0.1:1080 -I http://www.github.com 将autossh 设置为服务,隧道开机启动

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档:https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址:https://github.com/Hufe921/canvas-editor 前提声明: 由于CanvasEditor目前不支持vue、react 等框架开箱即用版,所以需要我们去Git下载源码,拿到其中两个主

代码随想录算法训练营:12/60

非科班学习算法day12 | LeetCode150:逆波兰表达式 ,Leetcode239: 滑动窗口最大值  目录 介绍 一、基础概念补充: 1.c++字符串转为数字 1. std::stoi, std::stol, std::stoll, std::stoul, std::stoull(最常用) 2. std::stringstream 3. std::atoi, std

android一键分享功能部分实现

为什么叫做部分实现呢,其实是我只实现一部分的分享。如新浪微博,那还有没去实现的是微信分享。还有一部分奇怪的问题:我QQ分享跟QQ空间的分享功能,我都没配置key那些都是原本集成就有的key也可以实现分享,谁清楚的麻烦详解下。 实现分享功能我们可以去www.mob.com这个网站集成。免费的,而且还有短信验证功能。等这分享研究完后就研究下短信验证功能。 开始实现步骤(新浪分享,以下是本人自己实现

基于Springboot + vue 的抗疫物质管理系统的设计与实现

目录 📚 前言 📑摘要 📑系统流程 📚 系统架构设计 📚 数据库设计 📚 系统功能的具体实现    💬 系统登录注册 系统登录 登录界面   用户添加  💬 抗疫列表展示模块     区域信息管理 添加物资详情 抗疫物资列表展示 抗疫物资申请 抗疫物资审核 ✒️ 源码实现 💖 源码获取 😁 联系方式 📚 前言 📑博客主页:

人工智能机器学习算法总结神经网络算法(前向及反向传播)

1.定义,意义和优缺点 定义: 神经网络算法是一种模仿人类大脑神经元之间连接方式的机器学习算法。通过多层神经元的组合和激活函数的非线性转换,神经网络能够学习数据的特征和模式,实现对复杂数据的建模和预测。(我们可以借助人类的神经元模型来更好的帮助我们理解该算法的本质,不过这里需要说明的是,虽然名字是神经网络,并且结构等等也是借鉴了神经网络,但其原型以及算法本质上还和生物层面的神经网络运行原理存在