- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构实验三:BST动态查找表汇总
HUNAN UNIVERSITY
课程实习报告
题 目: BST实现动态查找表
学生姓名:
学生学号:
专业班级:
指导老师: 李晓鸿
完成日期: 2015 11 21
一、需求分析
1、程序任务:
本程序是利用二叉查找树(BST)来实现;二叉树使用链式结构(二叉链表)实现,本程序要实现BST的构建,查找BST树中元素中两个功能。
2、输入形式:
输入整数n//BST的节点个数n。
输入n个数,其取值范围为(0, 216),对非法输入做处理。
3、输出形式:
若查找成功 整数m(次数)//返回成功和查找时比较的次数
若查找不成功 整数m(次数) //返回不成功和查找时比较的次数
若输入错误 “输入了无效的元素”
4、测试数据:
①.正常的输入
10 //BST的节点个数
//10个数据
50
输出:查找成功,查找次数1
输入:1
输出:查找成功,查找次数6
输入:3
输出:查找成功,查找次数4
输入:100
输出:查找成功,查找次数5
输入:19
输出:查找失败
②.只有左子树的情况
10 //BST的节点个数
//10个数据
,查找次数1
输入:12
输出:查找成功,查找次数6
输入:35
输出:查找成功,查找次数4
输入:95
输出:查找成功,查找次数5
输入:19
输出:查找失败
③.错误的节点数输入
-2 //BST的节点个数
10 //BST的个数
//10个数据
//结点的初始化
BinNodePtr(){lc=rc=NULL}
BinNodePtr(Elem e,BinNodePtr* l=NULL;BinNodePtr* r=NULL)
{it=e;lc=l;rc=r;}
//判断是否是叶子结点
bool isleaf(){return(lc==NULL)(rc==NULL)};
3.算法的基本思想
构建BST树:输入节点数后,依次输入每个结点的值,将第一个结点作为根结点,插入一个数,这个数与根节点先比较,若小于则再与根结点的左子树相比较,若大于则与根节点的右子树相比较。比较时,若小于根结点且根结点的左子树为空,则这个数为根结点左子树的值,若小于根结点又大于根结点的左子树,则运用指针将根结点的左指针指向这个值得地址,这个值地址的指针再指向原来根结点左子树;大于的情况同理。
查找:设置一个计数器,每查找一次则加一。从根节点开始,在BST中检索值K。如果根节点存储的值为K,则检索结束。如果不是,必须检索数的更深的一层。BST的效率在于只需检索两棵子树之一。如果K小于根节点的值,则只需检索左子树;若果K结点大于根结点的值,则检索右子树。这个过程一直持续到K被知道或者遇到一个叶子结点为止。如果叶子结点仍没有发现K,那么K就不在BST中。
4.程序的流程
程序由三个模块组成:
输入模块:输入结点数目初始数据,构建二叉查找树
查找模块:判断需要查找的值是否在该BST中
输出模块:输出查找成功与否,并输出比较的次数
详细设计
1.物理数据类型
动态查找表的数据为小数或整数,用float类型保存。
树的ADT具体实现
//初始化二叉树
bool InitBST(BST *b) {
b-root = NULL;
return true;
}
//销毁BST
bool clearBST(BSTNode * n)
{
if (n)
return false;
if (n-lchild)
clearBST(n-lchild);
if (n-rchild)
clearBST(n-rchild);
free(n);
return true;
}
//初始化节点
bool InitBSTNode(BSTNode * n)
{
n = (BSTNode *)malloc(sizeof(BSTNode));
n-lchild = NULL;
n-rchild = NULL;
return true;
}
结点的ADT具体实现
BinNodePtr(){lc=rc=NULL}//结点的
文档评论(0)