文件名称:AVL树实现
- 所属分类:
- 其它
- 资源属性:
- [Windows] [Visual C] [源码]
- 上传时间:
- 2010-04-03
- 文件大小:
- 23.97kb
- 下载次数:
- 0次
- 提 供 者:
- doitfreely
- 相关连接:
- 无
- 下载说明:
- 别用迅雷下载,失败请重下,重下不扣分!
介绍说明--下载内容均来自于网络,请自行研究使用
纯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查找节点,返回数据
(系统自动生成,下载前可以参看下载内容)
下载文件列表
压缩包 : 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