文件名称:AVL树实现
-
所属分类:
- 标签属性:
- 上传时间:2010-04-03
-
文件大小:23.97kb
-
已下载:0次
-
提 供 者:
-
相关连接:无下载说明:别用迅雷下载,失败请重下,重下不扣分!
下载1 (23.97kb)
别用迅雷、360浏览器下载。
如迅雷强制弹出,可右键点击选“另存为”。
失败请重下,重下不扣分。
如迅雷强制弹出,可右键点击选“另存为”。
失败请重下,重下不扣分。
介绍说明--下载内容来自于网络,使用问题请自行百度
纯C实现的AVL树,Demo是MFC的。非递归的遍历,完全支持添加、删除和搜索节点。设计灵活,容易扩展。以下是API
struct tagAvlTree;
typedef struct tagAvlTree AvlTree;
struct tagAvlNode;
typedef struct tagAvlNode AvlNode;
struct tagAvlNode
{
AvlNode *left;
AvlNode *right;
int32_t height;
uint32_t key;
void *user;
bool_t full;
};
#define AVL_MODE_REPLACE 1
#define AVL_MODE_PERFECT 2
#define AVL_ERROR_MEMORY -1
#define AVL_ERROR_CONFLICT -2
struct tagAvlTree
{
void *user;
AvlNode *root;
uint32_t flags;
bool_t (*dtor)(AvlNode *item);
AvlNode* (*ctor)(uint32_t key, void *user);
int32_t (*compare)(void *key1, void *key2);
};
AvlNode* AvlTraversePrior(AvlTree *tree, AvlNode *item, int32_t (*f)(AvlTree *tree, AvlNode *item, void *user), void *user);//先序遍历
AvlNode* AvlTraverseMiddle(AvlTree *tree, AvlNode *item, int32_t (*f)(AvlTree *tree, AvlNode *item, void *user), void *user);//中序遍历
AvlNode* AvlTraversePost(AvlTree *tree, AvlNode *item, int32_t (*f)(AvlTree *tree, AvlNode *item, void *user), void *user);//后序遍历
AvlNode* AvlTraverseReversePrior(AvlTree *tree, AvlNode *item, int32_t (*f)(AvlTree *tree, AvlNode *item, void *user), void *user);//先序遍历,先右后左
AvlNode* AvlTraverseReverseMiddle(AvlTree *tree, AvlNode *item, int32_t (*f)(AvlTree *tree, AvlNode *item, void *user), void *user);//中序遍历,先右后左
AvlNode* AvlTraverseReversePost(AvlTree *tree, AvlNode *item, int32_t (*f)(AvlTree *tree, AvlNode *item, void *user), void *user);//后序遍历,先右后左
AvlNode* AvlTraverseWide(AvlTree *tree, AvlNode *item, int32_t (*f)(AvlTree *tree, AvlNode *item, void *user), void *user);//广度优先遍历
void AvlCreate(AvlTree *tree);
void AvlDestroy(AvlTree *tree);
AvlNode* AvlMin(AvlNode *root);
AvlNode* AvlMax(AvlNode *root);
AvlNode* AvlPrev(AvlTree *tree, AvlNode *item);
AvlNode* AvlNext(AvlTree *tree, AvlNode *item);
uint32_t AvlDepth(AvlTree *tree, AvlNode *item);
AvlNode* AvlParent(AvlTree *tree, AvlNode *item, uint32_t nth);
AvlNode* AvlCheckBanlance(AvlTree *tree, AvlNode *item);
AvlNode* AvlRemove(AvlTree *tree, uint32_t key, bool_t freeit);
AvlNode* AvlInsert(AvlTree *tree, uint32_t key, void *user);
AvlNode* AvlReplace(AvlTree *tree, uint32_t key, void *user);
AvlNode* AvlIndex(AvlTree *tree, int32_t index);
void AvlSetMode(AvlTree *tree, uint32_t mode);
void AvlClearMode(AvlTree *tree, uint32_t mode);
void AvlInvertMode(AvlTree *tree, uint32_t mode);
uint32_t AvlIsInMode(AvlTree *tree, uint32_t mode);
bool_t AvlAdd(AvlTree *tree, AvlNode *item);
bool_t AvlClone(AvlTree *tree, AvlNode *item, AvlTree* copy);
AvlNode* AvlNear(AvlTree *tree, uint32_t key, int32_t (*compare)(void *key1, void *key2)); //按key查找节点或最临近点
AvlNode* AvlSearch(AvlTree *tree, uint32_t key, int32_t (*compare)(void *key1, void *key2)); //按key查找节点
void* AvlLookup(AvlTree *tree, uint32_t key, int32_t (*compare)(void *key1, void *key2)); //按key查找节点,返回数据
struct tagAvlTree;
typedef struct tagAvlTree AvlTree;
struct tagAvlNode;
typedef struct tagAvlNode AvlNode;
struct tagAvlNode
{
AvlNode *left;
AvlNode *right;
int32_t height;
uint32_t key;
void *user;
bool_t full;
};
#define AVL_MODE_REPLACE 1
#define AVL_MODE_PERFECT 2
#define AVL_ERROR_MEMORY -1
#define AVL_ERROR_CONFLICT -2
struct tagAvlTree
{
void *user;
AvlNode *root;
uint32_t flags;
bool_t (*dtor)(AvlNode *item);
AvlNode* (*ctor)(uint32_t key, void *user);
int32_t (*compare)(void *key1, void *key2);
};
AvlNode* AvlTraversePrior(AvlTree *tree, AvlNode *item, int32_t (*f)(AvlTree *tree, AvlNode *item, void *user), void *user);//先序遍历
AvlNode* AvlTraverseMiddle(AvlTree *tree, AvlNode *item, int32_t (*f)(AvlTree *tree, AvlNode *item, void *user), void *user);//中序遍历
AvlNode* AvlTraversePost(AvlTree *tree, AvlNode *item, int32_t (*f)(AvlTree *tree, AvlNode *item, void *user), void *user);//后序遍历
AvlNode* AvlTraverseReversePrior(AvlTree *tree, AvlNode *item, int32_t (*f)(AvlTree *tree, AvlNode *item, void *user), void *user);//先序遍历,先右后左
AvlNode* AvlTraverseReverseMiddle(AvlTree *tree, AvlNode *item, int32_t (*f)(AvlTree *tree, AvlNode *item, void *user), void *user);//中序遍历,先右后左
AvlNode* AvlTraverseReversePost(AvlTree *tree, AvlNode *item, int32_t (*f)(AvlTree *tree, AvlNode *item, void *user), void *user);//后序遍历,先右后左
AvlNode* AvlTraverseWide(AvlTree *tree, AvlNode *item, int32_t (*f)(AvlTree *tree, AvlNode *item, void *user), void *user);//广度优先遍历
void AvlCreate(AvlTree *tree);
void AvlDestroy(AvlTree *tree);
AvlNode* AvlMin(AvlNode *root);
AvlNode* AvlMax(AvlNode *root);
AvlNode* AvlPrev(AvlTree *tree, AvlNode *item);
AvlNode* AvlNext(AvlTree *tree, AvlNode *item);
uint32_t AvlDepth(AvlTree *tree, AvlNode *item);
AvlNode* AvlParent(AvlTree *tree, AvlNode *item, uint32_t nth);
AvlNode* AvlCheckBanlance(AvlTree *tree, AvlNode *item);
AvlNode* AvlRemove(AvlTree *tree, uint32_t key, bool_t freeit);
AvlNode* AvlInsert(AvlTree *tree, uint32_t key, void *user);
AvlNode* AvlReplace(AvlTree *tree, uint32_t key, void *user);
AvlNode* AvlIndex(AvlTree *tree, int32_t index);
void AvlSetMode(AvlTree *tree, uint32_t mode);
void AvlClearMode(AvlTree *tree, uint32_t mode);
void AvlInvertMode(AvlTree *tree, uint32_t mode);
uint32_t AvlIsInMode(AvlTree *tree, uint32_t mode);
bool_t AvlAdd(AvlTree *tree, AvlNode *item);
bool_t AvlClone(AvlTree *tree, AvlNode *item, AvlTree* copy);
AvlNode* AvlNear(AvlTree *tree, uint32_t key, int32_t (*compare)(void *key1, void *key2)); //按key查找节点或最临近点
AvlNode* AvlSearch(AvlTree *tree, uint32_t key, int32_t (*compare)(void *key1, void *key2)); //按key查找节点
void* AvlLookup(AvlTree *tree, uint32_t key, int32_t (*compare)(void *key1, void *key2)); //按key查找节点,返回数据
相关搜索: AVL 二叉平衡树
(系统自动生成,下载前可以参看下载内容)
下载文件列表
压缩包 : AvlTree.rar 列表 avl.h AvlTree.h AvlTreeDoc.h AvlTreeView.h MainFrm.h Resource.h StdAfx.h stdint.h avl.c avl.cpp AvlTree.cpp AvlTreeDoc.cpp AvlTreeView.cpp MainFrm.cpp StdAfx.cpp AvlTree.exe res/Toolbar.bmp AvlTree.clw AvlTree.dsp AvlTree.dsw res/AvlTree.ico res/AvlTreeDoc.ico AvlTree.rc res/AvlTree.rc2 res
本网站为编程资源及源代码搜集、介绍的搜索网站,版权归原作者所有! 粤ICP备11031372号
1999-2046 搜珍网 All Rights Reserved.