动态查找表实验报告Word格式文档下载.docx
《动态查找表实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《动态查找表实验报告Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
3.实验时严肃认真,要严格按照要求独立进行设计,不能随意更改。
注意观察并记录各种错误现象,纠正错误,使程序满足预定的要求,实验记录应作为实验报告的一部分。
4.实验后要及时总结,写出实验报告,并附所打印的问题解答、程序清单,所输入的数据及相应的运行结果。
所用软件环境或工具:
DEV-C++5可视化编程环境.
3.动态查找表的抽象数据类型
ADTDynamicSearchTable{
数据对象D:
D是具有相同特性的数据元素的集合。
每个数据元素含有类型相同的关键字,可唯一
标识数据元素。
数据关系R:
数据元素同属一个集合。
基本操作P:
InitDSTable(&
DT);
操作结果:
构造一个空的动态查找表DT。
DestroyDSTable(&
初始条件:
动态查找表DT存在;
销毁动态查找表DT。
SearchDSTable(DT,key);
动态查找表DT存在,key为和关键字类型相同的给定值;
若DT中存在其关键字等于key的数据元素,则函数值为该元素的值或在表中的位置,否
则为“空”。
InsertDSTable(&
DT,e);
动态查找表DT存在,e为待插入的数据元素;
若DT中不存在其关键字等于的数据元素,则插入e到DT。
DeleteDSTable(&
T,key);
若DT中存在其关键字等于key的数据元素,则删除之。
TraverseDSTable(DT,Visit());
动态查找表DT存在,Visit是对结点操作的应用函数;
按某种次序对DT的每个结点调用函数visit()一次且至多一次。
一旦visit()失败,则
操作失败。
}ADTDynamicSearchTable
2.动态查找表的特点
二叉排序树是一种动态树表,其特点是,树的结构通常不是一资生成的,面是在查找过程中,当树中不存在关键字等于给定值的结点时再进行插入。
新插入的结点一定是一个新添加的叶子结点,并且是查找不成功时查找路径上访问的最后一个结点的左孩子或右孩子结点。
3.算法设计
#include<
>
#include<
cstdlib>
iostream>
typedefstructElemType{
intkey;
}ElemType;
typedefstructbitnode{建立二叉排序树*\n"
);
printf("
*2.二叉排序树查找元素*\n"
*3.二叉排序树插入元素*\n"
*4.二叉排序树删除元素*\n"
*5.遍历二叉排序树*\n"
*6.销毁二叉排序树*\n"
*7.退出*\n"
**\n"
***********************************************************\n"
printf("
请输入你的选择:
\n"
scanf("
%d"
&
h);
switch(h)
{
case1:
Init(T);
break;
case2:
chara;
printf("
请输入要查找的数据:
\n"
scanf("
n);
=n;
if(Search(T,e,NULL,p))
printf("
数据已经存在!
else
{printf("
数据不存在!
}
break;
case3:
请输入要插入的数据:
已经存在!
{
Insert(T,e);
成功插入!
}
break;
case4:
请输入要删除的数据:
Deletebit(T,n);
已经成功删除!
elseprintf("
case5:
intz;
do{
printf("
********************************************************************\n"
*遍历二叉排序树*\n"
*1.先序遍历二叉排序树*\n"
*2.中序遍历二叉排序树*\n"
*3.后序遍历二叉排序树*\n"
*4.退出*\n"
scanf("
z);
switch(z)
case1:
printf("
先序遍历二叉排序树:
"
Xianxu(T);
中序遍历二叉排序树:
Zhongxu(T);
后序遍历二叉排序树:
Houxu(T);
case4:
退出!
返回上级菜单!
default:
选择错误,重新开始!
}
}while(z!
=4);
break;
case6:
确定是否要销毁二叉排序树(y/n)\n"
\n%c"
c);
getch();
if(c=='
y'
)
Destory(T);
所选数据已成功销毁!
getch();
T=NULL;
else
所选数据销毁失败!
case7:
退出!
default:
}
}while(h!
=7);
}
4.调试
主页面
1.建立二叉排序树
输入十个数据:
10,15,26,96,82,37,46,50,61,03,99
2.查找元素:
26存在则输出
3.插入元素:
4.删除元素:
56(不存在)99(存在)
5.遍历:
跳入二级子菜单,里边分别有三种遍历方式可供选择,分别为先序,中序,后序
6.在子菜单中选择4退出则返回到上级菜单,即主页面
7销毁二叉树:
先询问是否确认要销毁,输入y则销毁,输入n则销毁失败
说明:
(1)输入十个数据:
(2)查找26,26存在则输出(3)插入100
(4)删除56和99,56不存在则输出“该数据不存在”,99存在则输出“成功删除”
(5)遍历:
跳入二级子菜单,里边分别有三种遍历方式可供选择
分别是先序:
15,3,13,26,96,82,37,46,50,61,100
中序:
3,13,15,26,37,46,50,100,61,82,96,
后序:
13,3,100,61,50,46,37,82,96,26,15,
退出后则返回到上级菜单
(6)销毁二叉树:
先询问是否确认要销毁,输入Y/y则销毁,输入N/n则销毁失败
5.实验总结
这次实验难度不是很大,因为很多算法书本上有,而且我在图书馆里也找了几本数据结构算法实现的书,参考了很多,而且我选择了最简单的二叉树的存储结构来实现。
这次实验使我认识到存储结构和算法实现之间的关连。
存储结构决定算法的实现。
不同的存储结构,在算法的实现方面有很大差别。
例如你选择B树或键树的话相对于我来说就比较困难,因为掌握的不是很好。
很开心自己完成了这次实验,因为这次实验让我多翻了几本书,对动态查找表有了比上课更深的认识,除此之外,我觉得更重要的是我掌握了一些从书上学不到的知识,思想交流和一些处理大问题的一些好方法,就是把大问题模块化和模块规划等等。
还有这次在算法的实现上我最大的困难时在头文件那里,因为很少自己搞编程,所以对于这些也要花费很长时间,说来惭愧,但是还是很开心,通过上网查找,还有师兄师姐的帮助,终于搞定了这个头文件。
所以说以后要多自己动手,动脑。
其实这次在做实验的过程中还有一个体会,那学程序的要先学会看程序,接着是改程序,然后才是写程序,这也是以前的老师告诉我们的。