c语言树结构的头文件,2-d树头文件C语言

2-d树,昨天写的.今天本想来好好玩会球,不想玩了一小会就散伙了.于是来上会网.

这个东西,支持二维的范围查找,十分有用.关于优化的部分,我并不承认.我觉得我所知的那种优化方式开销太大,而且实现十分困难,于是没有去实现.写的这套ADT很不错,关于范围查找非递归的实现,我想到了层序遍历,这真是一个好主意,我都为自己高兴,觉得自己的想法很到位.事实证明,问题也确实依次解决的,很不错,很不错.呵呵.

如果自顶向下进行判断,左右子树都要判断,并且左右子树很有可能同时满足条件,于是不适用递归很难实现,层序遍历真是个好办法.好吧,不多夸自己了.贴出来了.

/*2dTree.h -- 2-d树头文件*/

#include

#include

/*明显常量定义*/

#define FALSE (0)

#define TRUE (1)

#define TWO (2)

#define MASK (1)

/*数据类型定义*/

typedef int BOOL ;

/*2-d树部分*/

typedef int Item ;

typedef struct node

{

Item item[TWO] ;

int deleted ;

struct node * left, * right ;

} Node ;

typedef struct twoDTree

{

Node * root ;

int current ;

} * TwoDTree ;

/*队列部分*/

typedef struct queueNode

{

Node * node ;

int index ;

struct queueNode * next ;

} QueueNode ;

typedef struct queue

{

QueueNode * front, * rear ;

int current ;

} * Queue ;

/*接口函数声明*/

/*队列部分*/

/*操作:创建并初始化一个队列*/

/*操作前:pq 指向一个队列*/

/*操作前:如果内存分配成功, 创建并初始化该队列, 返回 TRUE ; 否则返回 FALSE*/

/*时间复杂度:O (1)*/

BOOL Initialize_Q (Queue * const pq) ;

/*操作:确定队列是否为空*/

/*操作前:pq 指向一个已初始化的队列*/

/*操作后:如果该队列为空, 返回 TRUE ; 否则返回 FALSE*/

/*时间复杂度:O (1)*/

BOOL IsEmpty_Q (const Queue * const pq) ;

/*操作:向队列中添加一个数据域为指定数据的结点*/

/*操作前:pq 指向一个已初始化的队列, pn 和 index 是待添加的数据*/

/*操作后:如果内存分配成功, 向该队列中添加数据域为 pn 和 index 的结点, 返回 TRUE ; 否则返回 FALSE*/

/*时间复杂度:O (1)*/

BOOL EnQueue_Q (const Queue * const pq, Node * const pn, const int index) ;

/*操作:删除队列头部的结点, 取出该结点指向地址的值赋给 * pqn*/

/*操作前:pq 指向一个已初始化的队列, pqn 是一个指向QueueNode类型结点的指针*/

/*操作后:如果该队列非空, 删除该队列头部结点, 取出该结点指向地址的值赋给 * pqn, 返回 TRUE ; 否则返回 FALSE*/

/*时间复杂度:O (1)*/

BOOL DeQueue_Q (const Queue * const pq, QueueNode * const pqn) ;

/*操作:释放一个队列占用的内存空间*/

/*操作前:pq 指向一个已初始化的队列*/

/*操作后:该队列占用的内存空间被释放*/

/*时间复杂度:O (N)*/

void Release_Q (const Queue * const pq) ;

/*2-d树部分*/

/*操作:创建并初始化一个2-d树*/

/*操作前:pt 指向一棵2-d树*/

/*操作后:如果内存分配成功, 创建并初始化该2-d树, 返回 TRUE ; 否则返回 FALSE*/

/*时间复杂度:O (1)*/

BOOL Initialize_T (TwoDTree * const pt) ;

/*操作:确定一棵2-d树是否为空*/

/*操作前:pt 指向一棵已初始化的2-d树*/

/*操作后:如果该2-d树为空, 返回 TRUE ; 否则返回 FALSE*/

/*时间复杂度:O (1)*/

BOOL IsEmpty_T (const TwoDTree * const pt) ;

/*操作:向一棵2-d树中插入数据域为指定数据的结点*/

/*操作前:pt 指向一棵已初始化的2-d树, pi 指向第一个待添加数据的地址*/

/*操作后:如果内存分配成功, 向该2-d树中添加数据域为 pi[0] 和 pi[1] 的结点(重复元将添加到右子树上), 返回 TRUE ; 否则返回 FALSE*/

/*平均时间复杂度:O (log N)*/

BOOL Insert_T (const TwoDTree * const pt, const Item * const pi) ;

/*操作:在一棵2-d树中将一个函数作用于满足查找范围的所有结点1次*/

/*操作前:pt 指向一棵已初始化的2-d树, low 和 high 分别是指向相应范围数据中第一个数据的指针, pfun 指向一个没有返回值, 接受一个 Node * 类型参数的函数*/

/*操作后:将 pfun 指向的函数作用于满足范围的所有结点1次, 返回找到的结点的个数*/

/*平均时间复杂度:O (log N)*/

int Find_T (const TwoDTree * const pt, const Item * const low, const Item * const high, void (* pfun) (const Node * const pn)) ;

/*操作:从一棵2-d树中懒惰删除数据域为指定数据的所有结点*/

/*操作前:pt 指向一棵已初始化的2-d树, pi 是指向第一个待删除数据的指针*/

/*操作后:删除数据域为待删除数据并且未被删除的结点, 返回此次调用删除结点的个数*/

/*平均时间复杂度:O (log N)*/

int Delete_T (const TwoDTree * const pt, const Item * const pi) ;

/*操作:释放一棵2-d树占用的内存空间*/

/*操作前:pt 指向一棵已初始化的2-d树*/

/*操作后:该2-d树占用的内存空间被释放*/

/*平均时间复杂度:O (log N)*/

void Release_T (const TwoDTree * const pt) ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值