⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 binary_search_tree.h

📁 数据结构的C语言实现
💻 H
字号:
/*****************************************************************/
/*
* Copyright (c) 2008,北京归创科技有限公司技术部
* All rights reserved.
* 
* 文件名称:binary_search_tree.h
* 用    途:二叉搜索树的接口说明
            此版本二叉树不支持重复关键字
            二叉搜索树和哈希表的区别是能有效支持排序
            二叉搜索树的搜索性能最好的情况等同于二分法搜索
			二分法搜索应用于静态领域,在需要动态维护的情况下,因为插入的沉重代价(数组整体后移),需要二叉搜索树来支持
* 创建日期:2008年7月17日
*/

/*****************************************************************/


#ifndef DS_BINARY_SEARCH_TREE_H
#define DS_BINARY_SEARCH_TREE_H

#include "ds_define.h"

#define NO_FATHER 0
#define LEFT_CHILD 1
#define RIGHT_CHILD 2

typedef struct bst_value
{
	void *key,*data;//关键字和内容指针
} bst_value;

typedef struct bst_node
{
	bst_value *kv;
	struct bst_node *left;//左孩子
	struct bst_node *right;//右孩子
} bst_node;

typedef struct binary_search_tree
{
	bst_node *root;//树根
	unsigned int entrycount;//节点数量
	int (*equalbykey)(const void *key1,const void *key2);//插入和搜索时使用的关键字比较方法,由外部定义
} binary_search_tree;

/*****************************************************************/
/*
* 创建关键字为int类型的二叉树
*/
/*****************************************************************/
binary_search_tree *bst_create_intkey();

/*****************************************************************/
/*
* 创建关键字为字符串的二叉树
*/
/*****************************************************************/
binary_search_tree *bst_create_stringkey();

/*****************************************************************/
/*
* 创建二叉树
* equalbykey:关键字比较函数
*/
/*****************************************************************/
binary_search_tree *bst_create(int (*equalbykey)(const void *key1,const void *key2));


/*****************************************************************/
/*
* 插入元素,若成功返回DS_SUCCESS,否则返回对应的错误代码
*/
/*****************************************************************/
DS_RESULT bst_insert(const void *key,const void *data,binary_search_tree *bst);

/*****************************************************************/
/*
* 删除指定的关键字的元素
* 另外一种实现则是在节点中放置一个标志位,标志是否删除,实际搜索的时候忽略标志删除的节点
* 参数说明:
* freekey:若为TRUE,则同时释放外部传入的key指针,否则不释放key指针
* freedata:若为TRUE,则同时释放外部传入的data指针,否则不释放data指针
  若key或者data指针指向栈自动分配的空间,此时freekey或者freedata为TRUE时此方法将出错
*/
/*****************************************************************/
void bst_remove_bykey(void *key,BOOL freekey,BOOL freedata,binary_search_tree *bst);

/*****************************************************************/
/*
* 根据指定的关键字在二叉树中搜索,返回结果值,若搜索不到,则返回NULL
*/
/*****************************************************************/
void *bst_search_bykey(const void *key,const binary_search_tree *bst);

/*****************************************************************/
/*
* 哈希不能有效支持排序
* 排序返回元素,返回结果值数组,n为数组长度,若二叉树中没有元素或者内存错误,则返回NULL
* 此方法返回的bst_vlaue使用完毕要显式释放
*/
/*****************************************************************/
bst_value **bst_sort(int *len,const binary_search_tree *bst);

/*****************************************************************/
/*
* 释放二叉树
* 参数说明:
* bst:要释放的二叉树
* freekey:若为TRUE,则同时释放外部传入的key指针,否则不释放key指针
  若key指针指向栈自动分配的空间,此时freekey为TRUE时此方法将出错
* freedata:若为TRUE,则同时释放外部传入的data指针,否则不释放data指针
  若data指针指向栈自动分配的空间,此时freedata为TRUE时此方法将出错
*/
/*****************************************************************/
void bst_free(binary_search_tree *bst,BOOL freekey,BOOL freedata);


#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -