ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:102.51KB ,
资源ID:8190386      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8190386.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构与实验报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构与实验报告.docx

1、数据结构与实验报告数据结构实验报告一 题目要求1) 编程实现二叉排序树,包括生成、插入,删除;2) 对二叉排序树进行先根、中根、和后根非递归遍历;3) 每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么?二 解决方案对于前三个题目要求,我们用一个程序实现代码如下#include#include #include #include Stack.h /栈的头文件,没有用上typedef int ElemType; /数据类型t

2、ypedef int Status; /返回值类型/定义二叉树结构typedef struct BiTNode ElemType data; /数据域 struct BiTNode *lChild, *rChild;/左右子树域BiTNode, *BiTree;int InsertBST(BiTree &T,int key)/插入二叉树函数 if(T=NULL) T = (BiTree)malloc(sizeof(BiTNode); T-data=key; T-lChild=T-rChild=NULL; return 1; else if(keydata) InsertBST(T-lChild

3、,key); else if(keyT-data) InsertBST(T-rChild,key); else return 0;BiTree CreateBST(int a,int n)/创建二叉树函数 BiTree bst=NULL; int i=0; while(irChild) /右子树为空 重接它的左子树 q=T; T=(T)-lChild; free(q); else if(!(T)-lChild) /若左子树空 则重新接它的右子树 q=T; T=(T)-rChild; else q=T; s=(T)-lChild; while(s-rChild) q=s; s=s-rChild;

4、 (T)-data=s-data; /s指向被删除结点的前驱 if(q!=T) q-rChild=s-lChild; else q-lChild=s-lChild; free(s); return 1; /删除函数,在T中 删除key元素int DeleteBST(BiTree &T,int key) if(!T) return 0; else if(key=(T)-data) return Delete(T); else if(keydata) return DeleteBST(T-lChild,key); else return DeleteBST(T-rChild,key); int P

5、osttreeDepth(BiTree T)/求深度 int hr,hl,max; if(!T=NULL) hl=PosttreeDepth(T-lChild); hr=PosttreeDepth(T-rChild); max=hlhr?hl:hr; return max+1; else return 0; void printtree(BiTree T,int nlayer)/打印二叉树 if(T=NULL) return ; printtree(T-rChild,nlayer+1); for(int i=0;idata); printtree(T-lChild,nlayer+1);void

6、 PreOrderNoRec(BiTree root)/先序非递归遍历 BiTree p=root; BiTree stack50; int num=0; while(NULL!=p|num0) while(NULL!=p) printf(%d ,p-data); stacknum+=p; p=p-lChild; num-; p=stacknum; p=p-rChild; printf(n);void InOrderNoRec(BiTree root)/中序非递归遍历 BiTree p=root; int num=0; BiTree stack50; while(NULL!=p|num0) w

7、hile(NULL!=p) stacknum+=p; p=p-lChild; num-; p=stacknum; printf(%d ,p-data); p=p-rChild; printf(n);void PostOrderNoRec(BiTree root)/后序非递归遍历 BiTree p=root; BiTree stack50; int num=0; BiTree have_visited=NULL; while(NULL!=p|num0) while(NULL!=p) stacknum+=p; p=p-lChild; p=stacknum-1; if(NULL=p-rChild|h

8、ave_visited=p-rChild) printf(%d ,p-data); num-; have_visited=p; p=NULL; else p=p-rChild; printf(n);int main()/主函数 printf( -二叉排序树的实现-); printf(n); int layer; int i; int num; printf(输入节点个数:); scanf(%d,&num); printf(依次输入这些整数(要不相等)); int *arr=(int*)malloc(num*sizeof(int); for(i=0;ino=no;T-name=name;T-sc

9、ore=score; T-lChild=T-rChild=NULL; return 1; else if(nono) InsertBST(T-lChild,no,score,name); else if(keyT-data) InsertBST(T-rChild, no,score,name); else return 0;其他含参函数也类似即可完成50个信息存储用数组存储50个信息,查看以往代码#include#includeusing namespace std;class studentprivate: int num; string name; int ob1; int ob2; in

10、t ara;public: void set(int a,string b,int c,int d); void show(); int average();void student :set(int a,string b,int c,int d) num=a; name=b; ob1=c; ob2=d; ara=(c+d)/2;void student:show() cout学号:num 姓名:name 科目一:ob1 科目二:ob2 平均成绩:araendl;int student:average() return ara;int main() cout 欢迎来到学生管理系统endl; c

11、out 0.查询学号信息:endl; cout 1.删除学号信息:endl; cout 2.添加学号新信息endl; cout 3.按平均分降序显示所有学生信息endl; cout 4. 退出endl; student *ptr=new student21; ptr1.set(1,小明,88,67);/已存入的学生信息 ptr2.set(2,小李,68,82); ptr3.set(3,小王,68,62); ptr4.set(4,小陈,79,82); ptr5.set(5,小张,63,82); ptr6.set(6,小红,68,73); ptr7.set(7,小木,62,77); ptr8.se

12、t(8,小添,65,86); ptr9.set(9,小天,68,82); ptr10.set(10,张三,88,82); ptr11.set(11,李四,98,82); ptr12.set(12,王五,88,81); ptr13.set(13,小月,58,82); ptr14.set(14,小鑫,78,80); ptr15.set(15,小良,68,92); ptr16.set(16,小成,68,82); ptr17.set(17,小敏,98,92); ptr18.set(18,小问,88,88); ptr19.set(19,小文,48,82); ptr20.set(20,小瑞,98,62);

13、/已存入的学生信息 int numlock; int j=0; int i,k,m; int q,e,r; string w; while(1) cout 按0,1,2,3,4进行操作numlock; switch(numlock) case 0: cout输入想查询的学号i; if(i=j) cout该学号信息已被删除endl; break; ptri.show(); break; case 1: cout输入想删除的学号j; deletejptr; cout删除成功endl; break; case 2: cout输入想添加的学号信息k; if(k!=j) cout该学号信息已经存在,添加

14、失败endl; break; cout重新输入添加的学号q; cout输入姓名w; cout输入科目一的成绩e; cout输入科目二的成绩r; ptrk.set(q,w,e,r); break; case 3: for( m=1;m20;m+) for(int n=m+1;n20;n+) if(ptrm.average()ptrn.average() student a; a=ptrm; ptrm=ptrn; ptrn=a; ptrm.show(); break; case 4: cout谢谢使用endl; return 0; default: coutnumber out of 0 to 4

15、endl; break; return 0;三 测试结果二叉排序树储存数据界面(储存学生信息略)创建二叉树:插入节点:删除节点:非递归遍历:退出:数组储存学生信息界面分析查找效率:因为二叉树查找要创建二叉树,而数组查找只创建一个数组,二叉树的创建时间比较长,所以对于数据量较少的情况下数组的查找效率比较高。但当数据量增加时,二叉树的查找优势就显现出来。所以数据量越大的时候,二叉树的查找效率越高。四 总结与改进这个实验工作量还是很大的,做了很久。树状图形输出还是不美观,还需要改进。一开始打算用栈实现非递归,但是根据书里面的伪代码发现部分是在C+编译器里运行不了的(即使补充了头文件和数据的定义),所以之后参考了网上的数组非递归,发现其功能和栈相似。递归遍历的实现比非递归的遍历真的简单很多。开始时只看到前三问,所以没有写到储存学生数据的代码,里面还可以用clock()函数加一个计算查找所要数据时间的代码,让二叉树查找与数组查找到效率比较更加直观。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1