红黑树头文件C语言
2011-03-14 22:07
176 查看
红黑树,记得刚买那本书的时候我就发现有这个东西,觉得很神秘,终于接触到了,并且,我已经写出来了.很高兴.
插入的例程是书上自带的,我给代码实现了.细节部分,我并不是很清楚.删除例程,是自己写的,全下来写了大概15小时,很辛苦.昨天晚上到家就开始写,今天到家也是立刻就开始写,写完了.
我想说的是,关于删除例程, 算法部分的自己构建我很满意,旋转部分的细节实现以及细节,也是自己发现并总结的,而且是对的.很辛苦的过程啊,坚持过来了,哈哈.
并没有模块化删除例程,因为那个函数不容易建立,而且也觉得,这样很方便阅读,很好,哈哈.
还有一些想说的,就不该是这篇博客该说的了.上我的代码吧.
插入的例程是书上自带的,我给代码实现了.细节部分,我并不是很清楚.删除例程,是自己写的,全下来写了大概15小时,很辛苦.昨天晚上到家就开始写,今天到家也是立刻就开始写,写完了.
我想说的是,关于删除例程, 算法部分的自己构建我很满意,旋转部分的细节实现以及细节,也是自己发现并总结的,而且是对的.很辛苦的过程啊,坚持过来了,哈哈.
并没有模块化删除例程,因为那个函数不容易建立,而且也觉得,这样很方便阅读,很好,哈哈.
还有一些想说的,就不该是这篇博客该说的了.上我的代码吧.
/* RedBlackTree.h -- 红黑树头文件 */ /* 仅仅代码,就写了4天.删除例程写了三天.删除例程是自己实现的,够爽. */ #include <stdio.h> #include <stdlib.h> #include <assert.h> /* 明显常量定义 */ #define FALSE (0) #define TRUE (1) #define INFINITY (~(1 << 31)) #define NEGATIVE_INFINITY (1 << 31) /* 数据类型定义 */ typedef int BOOL ; typedef enum colorType {Red, Black} ColorType ; typedef int Item ; typedef struct node { Item item ; struct node * left, * right ; ColorType color ; } Node ; typedef struct redBlackTree { Node * root ; int current ; } * RedBlackTree ; /* 全局变量声明 */ static Node * NullNode = NULL ; Node * Current, * Sibling, * Parent, * GrParent, * GrGrParent ; /* 接口函数声明 */ /* 操作: 创建并初始化一棵红黑树并为 NullNode 分配内存空间 */ /* 操作前: prbt 指向一棵红黑树 */ /* 操作后: 如果内存分配成功, 该红黑树被初始化为空, 为 NullNode 分配内存空间, 返回 TRUE ; 否则返回 FALSE */ /* 时间复杂度: O (1) */ BOOL Create_R (RedBlackTree * const prbt) ; /* 操作: 确定一棵红黑树是否为空 */ /* 操作前: prbt 指向一棵已初始化的红黑树 */ /* 操作后: 如果该红黑树为空, 返回 TRUE ; 否则返回 FALSE */ /* 时间复杂度: O (1) */ BOOL IsEmpty_R (const RedBlackTree * const prbt) ; /* 操作: 向红黑树中插入一个结点 */ /* 操作前: prbt 指向一棵已初始化的红黑树, item 是待添加数据 */ /* 操作后: 如果内存分配成功 && item 之前不存在于该红黑树中, 向该红黑树中添加1个数据域为 item 的结点, 返回 TRUE ; 否则返回 FALSE */ /* 时间复杂度: O (log N) */ BOOL Insert_R (RedBlackTree * const prbt, const Item item) ; /* 操作: 从红黑树中删除一个结点 */ /* 操作前: prbt 指向一棵已初始化的红黑树, item 是待删除数据 */ /* 操作后: 如果找到该结点, 删除它, 返回 TRUE ; 否则返回 FALSE */ /* 时间复杂度: O (log N) */ BOOL Delete_R (RedBlackTree * const prbt, const Item item) ; /* 操作: 将一个函数以中序作用于红黑树中所有结点1次 */ /* 操作前: prbt 指向一棵已初始化的红黑树, pfun 指向一个没有返回值, 接受一个 Node * 类型参数的函数 */ /* 操作后: pfun 指向的函数被以中序依次作用于该红黑树中所有结点1次 */ /* 时间复杂度: O (N) */ void Traversal_R (const RedBlackTree * const prbt, void (* pfun) (const Node * const pn)) ; /* 操作: 释放一棵红黑树占用的内存空间 */ /* 操作前: prbt 指向一棵已初始化的红黑树 */ /* 操作后: 该红黑树占用的内存空间被释放 */ /* 时间复杂度: O (N) */ void Release_R (const RedBlackTree * const prbt) ;
相关文章推荐
- 2-d树头文件C语言
- 2-d树头文件C语言
- AVL树头文件C语言(AVLTree.h)
- k-d树头文件C语言
- 盒子树头文件C语言
- Treap树头文件C语言
- AA树头文件C语言
- C语言中常用的文件读写方法(一)
- 使用c语言判断文件是否存在,并对其进行重命名
- 黑马程序员——C语言——文件读写
- 【C语言】【unix c】运行时文件
- 基于proteus的51单片机仿真实例四十、C语言的文件调用
- Linux下c语言实现将一个目录下的所有文件和目录复制到另一个目录下
- win7环境下实现cl.exe编译c语言 生成.i .asm .obj .exe 文件
- c语言读取txt文件的每一行
- 通过C语言创建sql脚本文件,利用sqlite3 xxx.db < xxx.sql 生成xxx.db
- C语言简单的文件加密
- 用C语言进行BMP文件的读写
- C语言指针-----指针与文件
- C语言设置文件长度的方法,可以在WIndows和Linux上用