欢迎来到第壹文秘! | 帮助中心 分享价值,成长自我!
第壹文秘
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 第壹文秘 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    用顺序和二叉链表作存储结构实现二叉排序树全代码.docx

    • 资源ID:992900       资源大小:89.52KB        全文页数:23页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    用顺序和二叉链表作存储结构实现二叉排序树全代码.docx

    安徽新华学院数据结构课程设计报告题目:用顺序和二叉树存储结构实现二叉树排序学院:信息工程专业:信息与计算科学班级:12信科本一班姓名:李智学号:1242155110指导教师:李明设计时间:20131216至2(H31230课程设计任务书-设计任务研究关于如何创立二叉排序树并对树进行遍历,查找和删除等操作,同时关注用顺序和二叉链表作存储结构带来的区别。二.设计要求(1) .利用顺序存储和链式存储两种算法计算实现二叉搜索树的创立。(2) .利用顺序存储和链式存储两种算法计算实现中序遍历。(3) .利用顺序存储和链式存储两种算法计算实现查找结点。(4) .利用顺序存储和链式存储两种算法计算实现删除结点。.设计期限2013-12-16三2013-12-30前言数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科本课程设计中的二叉排序树,可以用顺序存储和链式存储两种算法计算。本课程设中的二叉排序树,一共要实现四项根本的功能。它们分别是二叉搜索树的创立、中序遍历、查找结点和删除结点。二叉树是树形结构的一个重要的类型,二叉树是n(n>=0)个结点的有限集,它或者是空集(n=0),或者由个根结点及两棵互不相交的、分别称作这个根的左子树和右子树的二叉树组成。二叉树的存储结构和算法比拟简单,特别适合计算机处理。即使一般形式的树也可简单的转换为二叉树。二叉树的顺序存储结构是把二叉树的所有结点,按照一定的次序顺序,存储到一片连续的存储单元中。遍历二叉树就是沿某有前序遍历、中条搜索路径周游二叉树,对树中每个结点访问一次且仅访问一次。在遍历方案中主要序遍历、后序遍历。现实中有许多应用到二叉树的例子,所以我们要把理论与现实结合起来。在学习中主要掌握怎么求二叉树的高度、叶子结点个数、总结点个数以及熟练三种遍历的方法。目录1需求分析21. 1问题的提出2任务与分析22总体设计2二叉排序树的建立2二叉排序树的中序遍历3二叉排序树中元素的查找3二叉排序树中元素的删除32. 5总体设计流程图3详细设计错误!未定义书签。3.1 中序遍历模块73.2 删除模块74编码与调试94.1顺序存储104.2二叉链表存储105总结11总结错误!未定义书签。心得体会12参考文献12全部代码13二叉链表结构C13二叉链表结构C+15顺序存储结构Cl81需求分析1.1 问题的提出研究关于如何创立二叉排序树并对树进行遍历,查找和删除等操作,同时关注用顺序和二叉链表作存储结构带来的区别。1.2 任务与分析用顺序和二叉链表作存储结构实现二叉排序树:(I)以回车('n')为输入结束标志,输入数列1.,生成一棵二叉排序树T;(2)对二叉排序树T作中序遍历,输出结果;(3)输入元素X,查找二叉排序树T,假设存在含X的结点,那么删除该结点,并作中序遍历(执行操作2);否那么输出信息“无x”O2总体设计二叉排序树的建立建二叉树的结点至少应当包含三个域,分别存放结点的数据data,左子女结点指针IeftChild和右子女结点指针righlChik1.整个二叉树的链表要有一个表头指针,它指向二叉树的根结点,其作用是当作树的访问点从空的二叉排序树开始,经过一系列的查找插入操作以后,生成了一棵二叉排序树。根据二叉排序树的定义,建立一棵二叉排序树的过程是按照待排序序列元素的先后次序,不断动态生成二叉树的结点,逐个插入到二叉树中。假设P为根结点指针,b为当前待插入元素,其过程可以描述为:假设为空树(p=nil),动态生成一个结点,其数据域为当前待插入元素b,左、右指针域为“空”,P指向该结点。假设非空树,比拟b与根结点数据daia(p)如果b<data(p),将b插入左子树中;如果b>data(p),将b插入右子树中;左、右子树的插入方式与二叉排序树的插入方式相同。不断调用上述的插入过程,直到所有待排序序列均排入后,就形成一棵二叉排序树。由此可见,建立二叉排序树就是屡次调用二叉排序树的插入算法。二叉排序树的中序遍历中序遍历二叉树算法的框架是:假设二叉树为空,那么空操作;否那么中序遍历左子树(1.);访问根结点(V);中序遍历右子树(R)o0二叉排序树中元素的查找在二叉排序树上进行查找,是一个从根结点开始,沿某一个分支逐层向下进行比拟判等的过程。它可以是一个递归的过程。假设我们想要在二叉排序树中查找关键码为X的元素,查找过程从根结点开始。如果根指针为NU1.1.,那么查找不成功;否那么用给定值X与根结点的关键码进行比拟;如果给定值等于根结点的关键码,那么查找成功,返回查找成功的信息,并报告查找到的结点地址。如果给定值小于根结点的关键码,那么继续递归查找根结点的左子树;否那么,递归搜索根结点的右子树。二叉排序树中元素的删除对于二叉排序树,删去树上的一个结点相当于删去有序序列中的一个记录,只要在删除某个结点之后依旧保持二叉排序树的特性即可。假设在二叉排序树上被删除结点为*P(指向结点的指针是P),其双亲结点为*f(结点指针为f),且不失一般性,可设*P是*f的左孩子,假设*P结点为叶子结点,即P和1均为空,只需修改其双亲结点指针即可。假设*P结点只有左子树或者只有右子树,只要令左子树或右子树直接成为其双亲结点即可。假设左子树和右子树都不为空,令*P的直接前驱替代*P,然后从二叉排序树中删除它的直接前驱,即可。总体设计流程图3.详细设计>Tnode的声明typedefstructTnodeintdata;structTnode*lchild,*rchild;*node,BSTnode; searchBST的声明SearchBST(nodet,intkey,nodef,node*p)(if(1t)*p=f;return(O);elseif(key=t->data)*p=t;return(1);elseif(key<t->data)searchBST(t->lchild,key,t,p);elsesearchBST(t->rchiId,key,t,p);) insertBST的声明insertBST(node*t,intkey)(nodep=NU1.1.,s=NU1.1.;if(!searchBST(*t,key,NU1.1.,&p)(s=(node)malIoc(siZeof(BSTnode);s->data-key;s->lchild=s->rchiId=NU1.1.;if(!p)*t=s;elseif(key<p->data)p->lchild=s;elsep->rchild=s;return(1);)elsereturn(O);) inorderTraverse类的声明inorderTraverse(node*t)if(inorderTraverse(&(*t)->lchiId)printf(zz%d,z,(*t)->data);if(inorderTraverse(&(*t)->rchild);return(1);)Delete类的声明nodeDelete(nodet,intkey)nodep=t,q=NU1.1.,s,f;whiIe(p!=NU1.1.)if(p->data=key)break;q=P;if(p->data>key)p=p->lchild;elsep=p->rchild;)if(P=NU1.1.)returnt;if(p->IchiId=NU1.1.)(if(q=NU1.1.)t=p->rchild;elseif(q->lchild-p)q->lchild=p->rchiId;elseq->rchild=p->rchiId;free(p);)elsef=P;s=p->lchild;while(s->rchild)f=s;s=s->rchild;if(f=p)f->lchild=s->lchiId;elsef->rchild=s->lchiId;p->data=s->data;free(三);returnt;1.1 中序遍历模块系统将提示用户输入新添加的数据,输入结束后进行中序遍历关键代码:InorderTraverse(node*t)/*中序遍历函数*/(if(*t)if(inorderTraverse(&(*t)->lchild)/*中序遍历根的左子树*/printfCz%d",(*t)->data);/*输出根结点*/if(inorderTraverse(&(*t)->rchiId);/*中序遍历根的右子树*/)return(1);3. 2删除模块系统将对用户输入的数进行查找,查找到之后删除此数,并对全部数据进行中序遍历。关键代码:nodeDelete(nodet,intkey)*删除函数*/nodep=t,q=NU1.1.,s,f;while(p!=NU1.1.)*查找要删除的点*/(if(p->data-key)break;q=p;if(p->data>key)p=p->lchild;elsep=p->rchiId;)if(p=NU1.1.)returnt;*查找失败*/if(p->lchiId=NU1.1.)*p指向当前要删除的结点*/(if(q=NU1.1.)t=p->rchild;*q指向要删结点的父母*/elseif(q->lchild=p)q->lchild=p->rchiId;*p为q的左孩子*/elseq->rchild=p->rchild;/*p为q的右孩子*/free(p);)else*P的左孩子不为空*/f=p;s=p->lchiId;While(s->rchild)*左拐后向右走到底*/f=s;s=s->rchiId;if(f-p)f->lchild=s->lchiId;/*重接f的左子树*/elsef->rchi1d=s->!child;/*重接f的右子树*/p->data=s->data;free(三);returnt;4编码与调试首先进入VC+6.0,翻开工程zjr.dsw,然后进入源程序,也可以不翻开工程,直接双击Zjr文件夹下的zjr.exe文件即可运行程序。4.1顺序存储图.1翻开程序,成功显示提示信息图输入数据,以O结束输入,操作成功图功能1:中序输出数据,操作成功图功能2:删除数据,显示提示信息,操作成功图删除数据,操作成功图重复执行程序,操作成功4. 2二叉链表存储图翻开程序,显示提示信息,操作成功图功能1:输入数据,进行中序遍历,操作成功图功能2:输入数据,进行删除,操作失败,因为没有此数据,显示错误信息功能2:输入数据,进行中序遍历,操作成功通过上述测试,本系统实现了二叉树的生成,中序遍历,查找删除功能,能防止数据的输入错误等。验证结果正确,说明其符合算法设计的要求:(1)正确性、可读

    注意事项

    本文(用顺序和二叉链表作存储结构实现二叉排序树全代码.docx)为本站会员(p**)主动上传,第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知第壹文秘(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 1wenmi网站版权所有

    经营许可证编号:宁ICP备2022001189号-1

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第壹文秘网,我们立即给予删除!

    收起
    展开