2022年二叉树抽象大数据类型大数据结构实验报告材料 .pdf





《2022年二叉树抽象大数据类型大数据结构实验报告材料 .pdf》由会员分享,可在线阅读,更多相关《2022年二叉树抽象大数据类型大数据结构实验报告材料 .pdf(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实用标准文档文案大全数据结构实验报告题目:二叉树抽象数据类型的实现学院* 学院专业* 年级班别* 学号*学生姓名 * 指导教师成绩 _2012 年 6 月精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 24 页实用标准文档文案大全报告:内容:详细完整不完整设计方案:非常合理合理较差实现:全部实现部分实现未实现文档格式:规范基本规范不规范答辩:理解题目透彻,问题回答流利理解题目较透彻,回答问题基本正确部分理解题目,部分问题回答正确未能完全理解题目,答辩情况较差总评成绩:优良中及格不及格精选学习资料 - - - - - - - - - 名师
2、归纳总结 - - - - - - -第 2 页,共 24 页实用标准文档文案大全一实验概要二叉树抽象数据类型的实现二. 实验目的1. 了解二叉树的定义以及各项基本操作。2. 实现二叉树存储、遍历及其他基本功能三. 实验仪器设备和材料 Visual studio 2010 四实验的内容1. 二叉树类型定义以及各基本操作的简要描述;ADT BinaryTree 数据对象 D:D是具有相同特性的数据元素的集合. 数据关系 R: 若 D=?,则 R=,称 BinaryTree 为空二叉树;若 D,则 R=H,H是如下二元关系:(1) 在 D中存在惟一的称为根的数据元素root ,它在关系 H下无前驱;
3、(2) 若 D-root?,则存在 D-root=D1,Dr,且 D1 Dr=?;(3) 若 D1 ?,则 D1中存在惟一的元素x1,H,且存在 Dr上的关系 HrH;H=,H1,Hr ;(4) (D1,H1 )是一棵符合本定义的二叉树,称为根的左子树,是一棵符合本定义的二叉树,称为根的右子树。基本操作 P: InitBiTree(&T); 操作结果:构造空二叉树T。DestroyBiTree(&T); 初始条件:二叉树T存在。操作结果:销毁二叉树T。CreateBiTree(&T,definition); 初始条件: definition给出二叉树 T 的定义。操作结果:按 definiti
4、on构造二叉树 T。ClearBiTree(&T); 初始条件:二叉树T存在。操作结果:将二叉树T清为空树。BiTreeEmpty(T); 初始条件:二叉树T存在。操作结果:若 T为空二叉树,则返回TURE, 否则 FALSE 。BiTreeDepth(T); 初始条件:二叉树T存在。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 24 页实用标准文档文案大全操作结果:返回T的深度。Root(T); 初始条件:二叉树T存在。操作结果:返回T的根。Value(T,e); 初始条件:二叉树 T 存在, e 是 T中的某个结点。操作结果:返回
5、 e 的值。Assign(T,&e,value); 初始条件:二叉树T 存在, e 是 T中的某个结点。操作结果:结点 e 赋值为 value 。Parent(T,e); 初始条件:二叉树T 存在, e 是 T中的某个结点。操作结果:若 e 是 T的非跟结点,则返回它的双亲,否则返回“空”。LeftChild(T,e); 初始条件:二叉树T存在, e 是 T 中的某个结点。操作结果:返回e 的左孩子。若 e 无左孩子,则返回“空” 。RightChild(T,e); 初始条件:二叉树T存在, e 是 T 中的某个结点。操作结果:返回e 的右孩子。若 e 无右孩子,则返回“空” 。LeftSib
6、ling(T,e); 初始条件:二叉树T存在, e 是 T 中的某个结点。操作结果:返回 e 的左兄弟。若 e 无左孩子或无左兄弟,则返回“空” 。RightSibling(T,e); 初始条件:二叉树T存在, e 是 T 中的某个结点。操作结果:返回 e 的右兄弟。若 e 无右孩子或无右兄弟,则返回“空” 。ADT BinaryTree2. 所选择的存储结构描述及在此存储结构上各基本操作的实现;3. 源代码主文件 :main.ccp: #includebase.h / 公用头文件、公共常量及公共函数等#includebitree.h / 二叉树二叉链表基本操作void Menu(); / 菜
7、单函数void Produce(char *str); / 随机产生二叉树先序序列函数int main() / 主函数 BiTree T,bt,insert_bt; char cmd,strMAXSIZE,elem; int loc,temp; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 24 页实用标准文档文案大全InitBiTree(T); / 初始化二叉链表二叉树Menu(); / 显示菜单while(1) ClearLine(); / 清空结果显示区printf(请选择操作: ( 按 Q退出 ); cmd = getch()
8、; ClearLine(); fflush(stdin); switch(cmd) case 0:/ 随机创建一棵二叉树while(cmd != y & cmd != Y) Produce(str); / 随机产生二叉树先序序列CreateBiTree(T,str);/ 用此序列建树ShowBiTree(T); / 广义表形式显示printf( 使用创建的这个二叉树?); cmd = getch(); ClearLine(); break; case 2:/ 手动创建一棵二叉树printf( 请按二叉树先序序列输入二叉树:( 空结点用空格 表示 )n ); CreateBiTree(T); C
9、learLine(); printf( 二叉树创建成功!n); ShowBiTree(T); getch(); break; case 4:/ 销毁二叉树DestroyBiTree(T); printf( 二叉树已被销毁!); getch(); break; case 6:/ 判空if(BiTreeEmpty(T) printf(二叉树是空二叉树。); else printf(二叉树非空 ); getch(); break; case 8:/ 求深度printf(深度是 %d,BiTreeDepth(T); getch(); break; 精选学习资料 - - - - - - - - - 名师
10、归纳总结 - - - - - - -第 5 页,共 24 页实用标准文档文案大全case a:/ 求左孩子ShowBiTree(T); printf(你想求哪个字符的左孩子?); do elem = getchar(); ClearLine(); bt = SearchBiTree(T,elem); / 查找指定的结点值elem if(!bt) printf( 你输入的结点不存在! 请重新输入:); while(!bt); ClearLine(); bt = LeftChild(T,bt); / 求左孩子if(bt) printf( %c的左孩子是 %c,elem,bt-data); else
11、 printf( %c没有左孩子 ,elem); printf(n参照二叉树 :); ShowBiTree(T); getch(); break; case c:/ 求右孩子ShowBiTree(T); printf( 你想求哪个字符的右孩子?); do elem = getchar(); ClearLine(); bt = SearchBiTree(T,elem); if(!bt) printf( 你输入的结点不存在! 请重新输入:); while(!bt); ClearLine(); bt = RightChild(T,bt); if(bt) printf( %c的右孩子是 %c,elem
12、,bt-data); else printf( %c没有右孩子 ,elem); printf(n参照二叉树 :); ShowBiTree(T); getch(); break; case 1:/ 先序遍历if(!BiTreeEmpty(T) printf(先序遍历序列为:); PreOrderTraverse(T,Visit); else printf(二叉树空,请先建树!); getch(); break; case 3:/ 中序遍历精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 24 页实用标准文档文案大全if(!BiTreeEmp
13、ty(T) printf(中序遍历序列为:); InOrderTraverse(T,Visit); else printf(二叉树空,请先建树!); getch(); break; case 5:/ 后序遍历if(!BiTreeEmpty(T) printf(后序遍历序列为:); PostOrderTraverse(T,Visit); else printf( 二叉树空,请先建树!); getch(); break; case 7:/ 层次遍历if(!BiTreeEmpty(T) printf(层次遍历序列为:); LevelOrderTraverse(T,Visit); else print
14、f(二叉树空,请先建树!); getch(); break; case 9:/ 插入一棵二叉树为另一棵二叉树的子树do / 随机创建一棵右孩子为空Produce(str); / 且层数小于4 的树CreateBiTree(insert_bt,str); while(insert_bt-rchild|BiTreeDepth(insert_bt) 3); printf( 先随机创建一棵右子树空的二叉树如图n); ShowBiTree(insert_bt); / 新创建的树getch(); printf( 你想插入这棵树为原树哪个结点的子树 :n); ShowBiTree(T); bt = Sear
15、chBiTree(T,getchar(); ClearLine(); printf( 你想插入为 0. 左孩子 1. 右孩子 :); fflush(stdin); scanf(%d,&loc); if(!InsertChild(T, bt, loc, insert_bt) printf( 插入出错 !); else 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 24 页实用标准文档文案大全ClearLine(); printf( 插入成功 ! 插入后 T 广义表形式为:n); ShowBiTree(T); getch(); break
16、; case b:/ 删除指定结点的子树ShowBiTree(T); printf( 你想删除哪个结点的子树?); fflush(stdin); bt = SearchBiTree(T,getchar(); printf(n你想删除 0. 左子树 1. 右子树 : ); fflush(stdin); scanf(%d,&loc); ClearLine(); if(!DeleteChild(T,bt,loc) printf( 删除出错 !); else printf( 删除成功,检查结果n); ShowBiTree(T); getch(); break; case e:/ 返回先序序列第i 个结
17、点的值printf(请输入一个结点的先序序列序号: ); scanf(%d,&loc); temp = loc; ClearLine(); elem = Value(T,temp); printf(参照二叉树 :); ShowBiTree(T); printf(n); if(elem = ) printf( 该结点不存在。); else printf( 先序序列第 %d个结点值为 %c,loc,elem); getch();break; case d:/ 结点赋值ShowBiTree(T); printf( 请输入要赋值的结点: ); do elem = getchar(); ClearLin
18、e(); bt = SearchBiTree(T,elem); if(!bt) printf( 你输入的结点不存在! 请重新输入:); while(!bt); ClearLine(); printf( 请输入新值 : ); fflush(stdin); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 24 页实用标准文档文案大全elem = getchar(); Assign(T,bt,elem); printf( 赋值成功,请查看二叉树状态.n); ShowBiTree(T); getch(); break; case Q:/ 退出c
19、ase q: exit(0); return 0; void Menu() / 显示菜单函数 printf( 0. 随机创建 CreateBiTree() 1. 先序遍历 PreOrderTraverse(); printf(nn 2. 手 动创 建CreateBiTree() 3. 中序 遍历InOrderTraverse(); printf(nn 4. 销 毁DestoryBiTree() 5. 后 序 遍 历PostOrderTraverse(); printf(nn 6. 判 空BiTreeEmpty() 7. 层 次 遍 历LevelOrderTraverse(); printf(n
20、n 8. 求深度 BiTreeDepth() 9. 插入子树 InsertChild(); printf(nn a. 求左孩子 LeftChild() b. 删除子树 DeleteChild(); printf(nn c. 求右孩子 RightChild() d. 结点赋值 Assign(); printf(nn e. 求结点值 Value(); printf(nn); void Produce(char *str) / 用随机数产生二叉树层次字符序列/ 使所有节点的字符不相同,空节点用&表示 int exist27 , i , elem, maxnodes = rand()%41; whil
21、e( maxnodes 31) maxnodes = rand()%41; /* 随机产生一个大于 15 小于 31 的随机数作为结点个数 */ for(i = 0; i 27 ;i+) existi = 0; / 初始化存在数组,用于使所有结点值不同i = 1; while(i maxnodes) elem = rand() % 26 ; if(!existelem & stri/2 != &) / 结点未生成且存在父节点精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 24 页实用标准文档文案大全 stri+ = elem + A;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年二叉树抽象大数据类型大数据结构实验报告材料 2022 二叉 抽象 数据类型 数据结构 实验 报告 材料

限制150内