教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 政务民生 >

数据结构 创建二叉排序树与查找

来源:网络收集 时间:2026-01-15
导读: 《数据结构》实验报告 ◎实验题目:创建二叉排序树与查找 ◎实验目的:1、掌握使用Visual C++6.0上机调试程序的基本方法; 2、掌握二叉排序树的创建和二叉排序树查找的方法。 3、提高自己分析问题和解决问题的能力,在实践中理解教材上的理论。 ◎实验内容:

《数据结构》实验报告

◎实验题目:创建二叉排序树与查找

◎实验目的:1、掌握使用Visual C++6.0上机调试程序的基本方法;

2、掌握二叉排序树的创建和二叉排序树查找的方法。

3、提高自己分析问题和解决问题的能力,在实践中理解教材上的理论。

◎实验内容:建立至少10个顶点的二叉排序树,然后对其进行中序遍历,接着进行查找, 判断待查找数据是否存在。 一、需求分析

1、输入的形式和输入值的范围:根据提示,首先输入顶点中的数据,在进行查找操作时,输入待查找的数据,接着选择下一步要进行的操作(A.新二叉排序树;B.继续查找;C.结束操作)。

2、输出的形式:输出二叉排序的中序遍历结果,在输入待查找的数据后,输出查找的结果。 3、程序所能达到的功能:输入顶点数据后,创建二叉排序树,接着进行中序遍历,再输入待查找数据进行查找操作。 4、测试数据:

请输入顶点数据:53 25 76 20 48 14 60 84 33 78 中序遍历结果为:14 20 25 33 48 53 60 76 78 84 输入待查找数据:33 待查找数据存在

选择操作(A.新二叉排序树;B.继续查找;C.结束操作):B 输入待查找数据:54 待查找数据不存在

选择操作(A.新二叉排序树;B.继续查找;C.结束操作):C 谢谢使用!

Press any key to continue 二 概要设计

1、二叉排序树又称二叉查找树,对一个二叉树若规定:任一结点如果有左子树,其左子树各结点的数据必须小于该结点的数据;任一结点如果有右子树,其右子树各结点的数据必须大于该结点的数据。按这样规定构成的二叉树称为二叉排序树。对二叉排序树进行中序遍历所得到的结点序列是一个有序序列。

2、创建二叉排序树的非递归算法执行的步骤如下: ①生成一个新结点;

②与根结点进行比较,如果小于根结点,沿左链域比较,如果大于根结点,沿右链域比较;

③直至到终端,插入该结点。

以序列53,25,76,20,48,14,60,84,33,78为例,所创建的二叉排序树如图所示。

3、二叉排序树查找

二叉排序树查找的基本思路:查找过程从根结点开始,首先将它的关键字与给定值k进行比较,,如果相等,则查找成功,输出有关的信息;如果不等,若根结点关键字大于给定值k,向左子树继续查找,否则向右子树继续查找。向子树查找又是树状查找,先以子树的根结点数据与k进行比较,如果不相等又转向它的左子树或右子树继续查找。

4、本程序的基本操作和模块:

建立二叉排序树的函数:Create(BiTNode *B)

二叉树的中序遍历函数:Inorder(BiTNode *B,SeqStack &K) 查找函数:Search(BiTNode *B,int key) 主函数:main( )

函数的调用关系如下图所示:

三 详细设计

(一)元素类型、结点类型 1、二叉树结点的类型描述 typedef struct node { char data; //data用于存储二叉树中的字母 struct node *lchild; //lchild为指向该结点左孩子的指针 struct node *rchild; //rchild为指向该结点下一层的指针 }BiTNode;

2、顺序栈的类型描述 typedef struct { BiTNode *pin[40]; //指针数组,用于存储广义表结点指针 int top; //栈顶指针 }SeqStack;

(二)每个模块的分析 1、主程序模块 main() { ①定义根结点指针 ②定义栈并初始化栈 ③申请根结点空间,令根结点B的lchild域和rchild域为空

④调用创建二叉排序树函数 ⑤调用中序遍历二叉树函数 ⑥调用查找函数进行查找 }

2、建立二叉排序树的函数 void Create(BiTNode *B) {

①定义指向当前结点的指针p,新结点的指针q,初始时p为空 ②输入不是回车时执行以下操作 { 输入结点数据 ◎若该数据是第一个数据 { 第一个数据存到根节点,p指针指向根结点 } ◎若该数据不是第一个数据 { ①申请新结点q,将该数据存入q的data域

令新结点q的lchild域和rchild域为空

②p指向根结点 ③当p指针所指结点和q指针所指结点中的数据不同时执行以下操作 {

◎如果p结点数据小于新结点q中的数据,执行以下操作 { 如果p的右孩子为空,令p的右孩子为q 将p的右孩子赋p } ◎如果p结点数据大于新结点q中的数据,执行以下操作 { 如果p的左孩子为空,令p的左孩子为q 将p的左孩子赋p } } } } }

3、查找函数

void Search(BiTNode *B,int key) { ①定义指向当前结点的指针p,初始时p指向根结点 ②当p不为空且p所指结点的数据不为待查找数据时,执行以下操作 { 如果当前结点中的数据小于待查找数据,则令p指向它的右孩子

如果当前结点中的数据大于待查找数据,则令p指向它的左孩子

} 循环结束后,若p为空则待查找数据不存在;否则待查找数据存在 }

4、中序遍历二叉树树的函数

void Display(GLNode *G,SeqStack &K) { ①定义表示当前结点的指针p,并令p指根结点。 ②当栈不为空或当前结点指针p不为空时,执行以下操作 while(K.top!=-1||p!=NULL) {

a.如果当前结点指针p为空,执行以下操作:

出栈,栈顶元素所指的结点作为当前结点p 输出当前结点p中的数据

令当前结点p的rchild域所指的结点作为当前结点p b.如果当前结点指针p不为空,执行以下操作:

当前结点指针p入栈

令当前结点p的rchild域所指的结点作为当前结点p

} }

四 使用说明、测试分析及结果

1、程序使用说明:

(1)本程序运行环境为Visual C++ 6.0;

(2)根据界面提示进行操作:输入多个数据时以空格分隔,每次输入按回车表示输入结束 2、测试结果与分析:

请输入顶点数据:53 25 76 20 48 14 60 84 33 78 中序遍历结果为:14 20 25 33 48 53 60 76 78 84 输入待查找数据:33 待查找数据存在

选择操作(A.新二叉排序树;B.继续查找;C.结束操作):B 输入待查找数据:54 待查找数据不存在

选择操作(A.新二叉排序树;B.继续查找;C.结束操作):C 谢谢使用!

Press any key to continue

由上测试结果分析得,该程序功能满足题目要求。 3、调试过程中遇到的问题及解决方法

本次实验的错误的主要发生在二叉排序树查找,对进行循环操作的条件判断不够完整,输出数据的条件判断不正确,使运行中出现错误。原因是在p为空时,仍判断p中数据是否与待查找数据相等。

另外,本次实验中的其它小错误都很快修改正确。 4、运行界面

五、实验总结

本次实验提前作了预习,老师在课堂上有详细的讲解,所以此次实验比较顺利,我在11月23日完成了本次实验。

本次实验,我很感谢老师和同学对我的指点。通过本次实验,对二叉排序树有了更深的认识,学会了如何利用二叉排序树查找数据,对一些细节更加理解,收获了很多。

…… 此处隐藏:955字,全部文档内容请下载后查看。喜欢就下载吧 ……
数据结构 创建二叉排序树与查找.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/447101.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)