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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

排序二叉树的应用数据结构课程设计报告.docx

1、排序二叉树的应用数据结构课程设计报告数据结构课程设计报告题目: 排序二叉树的应用一、设计任务1、程序在运行时,可以执行有关排序二叉树的操作:如插入一个元素、删除一个元素、查找一个元素、打印一个元素等。2、用递归算法遍历二叉树。二 、设计分析1 、 二叉树是n(n=0)个结点的有限集合,它或为空树(n=0),或由一个根结点和两棵分别称为根的左子树和右子树的互不相交的二叉树组成。二叉树是一个递归定义。一棵深度为k且有2k-1个结点的二叉树称为满二叉树。对满二叉树的结点进行连续编号,约定编号从根结点起,自上而下,自左而右。2 、 二叉树的存储结构1) 顺序存储结构:二叉树可以采用顺序存贮结构,即用一

2、维数组来存放二叉树的数据元素。它是按照满二叉树的结点层次编号层次来依次存放二叉树中的数据元素。2)链式存储结构:设计不同的结点结构可构成不同形式的链式存储结构。在本程序中,采用顺序存储结构,对二叉树进行插人、删除、查找、遍历等操作。3 、 二叉树的建立已知一棵二叉树,共有n个结点,建立的方法如下:1)照完全二叉树的编号方法,对该二叉树进行编号。2)次输入一个结点的值x和该结点的编号k,动态申请一块空间来存放该结点,空间的地址为p。3)把p值赋给adrk中。4)如果k=1,转到5;否则,把p的值填入其父结点的指针域中。p的父结点地址为adrk/2,若k为偶数,则做adrk/2-lc=p;若为奇数

3、,则做adrk/2-rc=p。5)重复24,直到全部顶点数据输入完为止。4 、 遍历二叉树,即如何按某条搜索路径寻访树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。一棵非空二叉树是由根结点(D)、左子树(L)和右子树(R)三个基本部分组成。要遍历这三个基本部分,可以有六种可能的顺序。若限定先左后右,则只有三种情况:先序遍历(DLR)、中序遍历(LDR)、后序遍历(LRD)。在本程序中,遍历二叉树函数的核心是以一个简单的case语句来实现的。5 、 二叉树的插入操作:这个操作首先生成一个新的结点结构,把数据存入新结点,然后搜索二叉树寻找插入结点的位置,再把新结点连接到二叉树。把这个操作

4、定义为一个函数,其函数名为instree。6 、 二叉树中元素的查找:在许多情况下,我们需要在一棵已知的二叉树中查找某个元素,以确定树中是否存在这个元素。这种查找与链表数据结构中查找成员的情况极类似。查找函数名字定义为membertree。7 、 从二叉树中删除一个成员:进行成员删除操作时,首先必须用递归函数遍历这棵树,找到这个元素。当找到这个元素之后,还要考虑以下四种不同的情况:删除一个终端结点;删除只有一个左孩子的结点;删除只有一个右孩子的结点;删除带有两个孩子的结点。删除函数名字定义为deltree。8 、 在主函数main( )中,除了初始化指针tp之外,用循环语句while(1)在屏

5、幕上显示出主菜单: I Insert an element into tree DDelete an element from the treeFFind a member in the treePPrint the treeQQuit用户可以根据自己的需要,从键盘键入不同的合法字母(例如I),而进入不同的树处理函数进行处理。不同树处理函数的选择是通过简单的switchcase语句来实现,其中包括了若错技术。如果用户从键盘输入的不是I,D,F,P,Q这些合法字符,则程序会先告诉用户输入出错,让用户重新输入,直到输入选择正确为止。三 、设计思路1 、主函数main() :由case语句组成,支持

6、程序选择,当运行时,可以执行有关二叉树的操作:如插入一个元素、删除一个元素、查找一个元素、打印一个元素等。2 、主要的树函数的说明部分1)void prttree(treeptr tnode,int t);/打印树。该函数在屏幕上打印出存放在树中的元素,如果是空树,则无输出。参数:tnode-指向根结点的指针; t-打印方式:0:前序 1:中序 2:后序(用递归算法遍历二叉树)。2)treeptr instree(char *s,int key,treeptr tnode);/插入一个元素。该函数把一个元素插入到二叉树中。参数:s,key-接收插入数据; tnode-是指向根结点的指针。3)t

7、reeptr membertree(char *s,treeptr tnode);/查找一个元素。该函数测定树中的指定元素,如果元素是树中的成员,则函树返回该元素,否则返回NULL指针.。参数:s-指向要找的那个串的指针;tnode-指向树根结点的指针。4)treeptr deltree(char *s,treeptr tnode);/删除一个元素。该函数删除一个结点。参数:s-要删除的结点的数据域的值; tnode-指向根结点的指针。5)treeptr findinspos(char *s,treeptr tnode);/该函数寻找一个元素要插入的位置。四 、流程图1、main( ) 函 数

8、IPD FQ 其 它输 入输 入 s sprintf tp=deltree Y N (s,tp) t=membe -tree(s,tp) printf printf break Yt!=NULLN输 入 printf printf任 意 数输 入 ibreak输 入 任 意 数prttree(tp,i)break输入任意数break2、主 要 树 函 数1)prttree( ) 函 数 开 始tnodeY!=NULL Nt012prttree(tnodprttree(tnodeprintf-e-left,t) -left,t)prttree(tnodprintfprttree(tnod-e-l

9、eft,t)-e-right,t)prttree(tnodprttree(tnod-e-right,t) -e-right,t)printf结 束2) instree( ) 函 数为t1分配空 间Y t1=NULL Nprintf t1-right=NULLprintft1-left=NULLreturnt1-key(tnode) =keystrcpy(t1-data,s)Ytnode=NULL Nreturnt2=findinspos(s,tonde) (t1) Y (strcmp(t2-data,s)right=t1 t2-left=t1return(tnode)结 束3) membert

10、ree( ) 函 数开 始t=tnode Nt!=NULL Ycmp=strcmp(t-data,s)Y cmp=0 Nreturn(t)Y cmpright t=t-leftreturn(NULL)结 束4) findinspos( ) 函 数开 始Y(strcmp(tnode-data,s)=0NY tnode-left=NULL NYtnode-right=NULL Nreturn(tnode) findinspos(s,tnode-left)return(tnode) findinspos(s,tnode-right) 结 束5) deltree( ) 函 数 开 始tnode=NUL

11、L Yreturn(NULL)ch=strcmp(tnode-data,s)Y ch=0 Nch0 Nfree(tno Y 无左孩子 N tnode-left=del tnode -de- -tree(s,tnode-left) -rightdata) =deltree t1=tnode- Y 无右孩子 N (s,tnode right -right) t1=tno t1=tnode free(tn -de- -righ-ode) free(tno left -de-da -ta) t2=tnodereturnfree -right (NULL) (tnode- free data) (tno

12、de)t2-left!=NULL N free Y return (tnode) (t1) t2=t2-leftreturn(t1) t2-left= tnode-left free(tnode-data) free(tnode) return(t1) 结 束五、源程序程序清单:#include #include #include #include #include typedef struct treenode *treeptr; /重定义机构指针类型为treeptrstruct treenode /树结点的基本数据结构 int key; /数据域 char data20; /数据域 tre

13、eptr left,right; /左,右指针;/主要的树函数的说明部分void prttree(treeptr tnode,int t);treeptr instree(char *s,int key,treeptr tnode);treeptr membertree(char *s,treeptr tnode);treeptr deltree(char *s,treeptr tnode);treeptr findinspos(char *s,treeptr tnode);main() treeptr tp,t; char ch; char s80; int key; int i; tp=N

14、ULL; /初始化根结点指针 while(1) clrscr(); gotoxy(20,5); printf(I-Insert an element into the tree); gotoxy(20,6); printf(D-Delete an element from the tree); gotoxy(20,7); printf(F-Find a member in the tree); gotoxy(20,8); printf(P-Print the tree); gotoxy(20,9); printf(Q-Quit); gotoxy(20,12); print(Make a seletion ); ch=g

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

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