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

加入VIP,省得不是一点点
 

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

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

下载须知

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

版权提示 | 免责声明

本文(计算机科学学院数据结构课程设计报告.DOC)为本站会员(国***)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

计算机科学学院数据结构课程设计报告.DOC

1、计算机科学学院数据结构课程设计报告平衡二叉树操作学生姓名:学 号:班 级:指导老师:报告日期:1. 需求分析1建立平衡二叉树并进行创建、查找、插入、删除等功能。2设计一个实现平衡二叉树的程序,可进行创建、查找、插入、删除等操作,实现动态的输入数据,实时的输出该树结构。3测试数据:自选数据2.概要设计1.抽象数据类型定义:typedef struct BSTNode int data; int bf; /节点的平衡因子struct BSTNode *lchild,*rchild; /左右孩子指针BSTNode,*BSTree;void CreatBST(BSTree /创建平衡二叉树void R

2、_Rotate(BSTree /对以*p 为根的二叉排序树作左旋处理void L_Rotate(BSTree /对以*p 为根的二叉排序树作左旋处理void LeftBalance(BSTree /对以指针所指结点为根的二叉树作左平衡旋转处理void RightBalance(BSTree /对以指针所指结点为根的二叉树作右平衡旋转处理bool InsertAVL(BSTree /插入结点 ebool SearchBST(BSTree /查找元素 key 是否在树 T 中void LeftBalance_div(BSTree /删除结点时左平衡旋转处理void RightBalance_div

3、(BSTree /删除结点时右平衡旋转处理void Delete(BSTree q,BSTree /删除结点int DeleteAVL(BSTree /平衡二叉树的删除操作void PrintBST(BSTree T,int m); /按树状打印输出二叉树的元素2. 主程序的流程请输入操作的选项编号(1-5)1-创建平衡二叉树2-查找3-插入4-删除5-结束3.各模块之间的层次调用3. 详细设计1.以平衡二叉树的插入和平衡化为例:bool InsertAVL(BSTree T-data = e;T-lchild = T-rchild =NULL;T-bf = EH; taller = true

4、;elseif(EQ(e,T-data) /树中已存在和有相同关键字的结点 taller = false;printf(“已存在相同关键字的结点n“); return 0; /则不再插入if(LT(e,T-data) /应继续在*T 的左子树中进行搜索if(!InsertAVL(T-lchild,e,taller) return 0;/未插入if(taller) /已插入到*T 的左子树中且左子树“长高”switch(T-bf) /检查*T 的平衡度case LH: /原本左子树比右子树高,需要作左平衡处理LeftBalance(T); taller = false; break;case E

5、H: /原本左子树、右子等高,现因左子树增高而使树增高主模块平衡化输入数据元素显示主菜单查找 插入 删除输出退出T-bf = LH; taller = true; break;case RH: /原本右子树比左子树高,现左、右子树等高T-bf = EH; taller = false; break;/switch(T-bf)/ifelse /应继续在 *T 的右子树中进行搜索if(!InsertAVL(T-rchild,e,taller) return 0;/未插入if(taller) /已插入到*T 的右子树中且右子树“长高”switch(T-bf) /检查*T 的平衡度case LH: /

6、原本左子树比右子树高,现左、右子树等高T-bf = EH; taller = false; break;case EH: /原本左子树、右子等高,现因右子树增高而使树增高T-bf = RH; taller = true; break;case RH: /原本右子树比左子树高,需要作右平衡处理RightBalance(T); taller = false; break;/switch(T-bf)/else/elsereturn 1;/InsertAVL2.说明:执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型量赋值时,会将缓冲区当成数据存入变量中,所以要在某些输入语句后面加getch

7、ar函数。 4.调试分析1. 遇到的问题:(1)对平衡二叉树的删除的算法设计程序存在很大问题。删除节点后需要对新的排序树平衡化,改变节点的信息,使之形成一棵新的平衡二叉树。(2)主函数中的实参和子函数中的实参相等,造成调用该子函数时,虽然没有错误,但其功能不能正确的实现。改变该变量后程序成功实现各种功能。(3)一些逻辑逻辑运算符书写不正确,造成实现的功能不正确或程序死循环。2.收获:(1)对平衡二叉树的构造、插入和删除的算法思想有了更清楚的认识,能够对平衡二叉树进行创建、调平、插入、删除等操作,实现动态的输入数据,实时的输出该树结构.(2)对多个程序的调用5.用户使用说明1.了解程序清单上给出

8、的功能,并根据提示依次进行操作。2.创建二叉树,输入的数据元素为整数,当输入-123 时,停止创建。并显示平衡二叉树的中序凹入树形图。3.查找(输入你要查找的元素) 。4.插入(输入要插入的数据元素,并输出)5.删除(删除指定的元素,并输出)6.结束说明:其中每一个功能实现后都会提示是否继续:选择 y 继续,否则,终止。6.测试结果1.创建平衡二叉树:(中序凹入输出)2.查找查找成功或失败时:3.插入4.删除,结束7.附录源代码:#include#include#define LH +1#define EH 0#define RH -1#define NULL 0typedef struct

9、BSTNode int data;int bf;struct BSTNode *lchild,*rchild;BSTNode,*BSTree;void CreatBST(BSTree void R_Rotate (BSTree void L_Rotate(BSTree void LeftBalance(BSTree void RightBalance(BSTree bool InsertAVL(BSTree bool SearchBST(BSTree void LeftBalance_div(BSTree void RightBalance_div(BSTree void Delete(BST

10、ree q,BSTree int DeleteAVL(BSTree void PrintBST(BSTree T,int depth);void main()BSTree T;int sear,cmd,depth;char ch;int shorter=0;bool taller=false;T=(BSTree)malloc(sizeof(BSTNode);T=NULL;printf(“*平衡二叉树的操作菜单*n“);printf(“ 1-创建n“);printf(“ 2-查找n“);printf(“ 3-插入n“);printf(“ 4-删除n“);printf(“ 5-退出n“);prin

11、tf(“*n“);doprintf(“n 请选择操作的编号:“);scanf(“%d“,getchar();switch(cmd)case 1:CreatBST(T);break;case 2:printf(“请输入您要查找的关键字:“);scanf(“%d“,getchar();if(SearchBST(T,sear) printf(“关键字%d 存在,查找成功!n“,sear);else printf(“查找失败 !n“);break;case 3:printf(“请输入您要插入的关键字:“);scanf(“%d“,getchar;InsertAVL(T,sear,taller);dept

12、h=0;PrintBST(T,depth);break;case 4:depth=0;printf(“请输入你要删除的关键字: “);scanf(“%d“, getchar();DeleteAVL(T,sear,shorter);PrintBST(T,depth); break;case 5:printf(“结束!n“);break;default:printf(“输入错误!n“);if(cmd=5)break;printf(“n 继续吗? y/n: “);scanf(“%s“,getchar();printf(“n“);while(ch=y);printf(“n“);void CreatBS

13、T(BSTree int e;bool taller=false;T = NULL;printf(“n 请输入关键字(以-123 结束建立平衡二叉树):“);scanf(“%d“,getchar();while(e != -123)InsertAVL(T,e,taller);printf(“n 请输入关键字(以-123 结束建立平衡二叉树):“);scanf(“%d“,getchar();taller=false;depth=0;printf(“n*n“);printf(“ 您创建的二叉树为n“);if(T)PrintBST(T,depth);elseprintf(“这是一棵空树!n“);void R_Rotate (BSTree lc=p-lchild;p-lchild=lc-rchild;lc-rchild=p;p=lc;void L_Rotate(BSTree rc=p-rchild;p-rchild=rc-lchild;rc-lchild=p;p=rc;void LeftBalance(BSTree lc=T-lchild;switch(lc-bf)case LH:T-bf=lc-bf=EH;R_Rotate(T);break;case RH:rd=lc-rchild;switch(rd-bf)case LH:T-bf=RH;lc-bf=EH;break;case EH:

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。