1、数据结构二叉排序树课程设计报告课 程 设计 报 告-数据结构题目:二叉排序树 姓 名: 学 号: 专 业: 班 级: 指导老师: 年 月日目录一、课程设计简介 3二、原理分析及流程 32.1、原理分析。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。 2.2、流程图.。.。.。.。.。.。.。.。.。.。.。.。.。4 、an()函数.。.。.。.。.。.。.。.。.。.。.。.。.。 、创建.。.。.。.。.。.。.。.。.。.。.。 3、插入。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。. 、查找。.。.。.。.。.。.。.。.。.。.。.。.。.。
2、.。.。.。.。.。.6、中序遍历输出三、算法描述 .1、存储结构8.2、插入算法34、删除算法 10四、小结与体会2五、程序执行过程 13 5.1、创建二叉排序树并中序输出。.。.。.。.。.。.。.。.。1 5。2、插入并中序输出.。.。.。.。.。.。.。.。.。.。.。.。3 3、查找.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.4一、课程设计简介 1、题目:二叉排序树相关操作、创建二叉排序树;、插入给定值;3、查找给定值; 4、删除给定值的结点。 1。、报告要求:、封面; 2、题目与流程图或模块图;3、程序清单和运行结果; 4、小结(收获和体会);5、装订成册。 1。
3、3、目的: 课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力.提高学生适应实际,实践编程的能力。二、原理分析及流程 2.1、原理分析:根据题目要求,要实现这些功能,就必须创建一个菜单.这个菜单设置在mai()函数里面,然后使用whle()。.switch()语句进行循环调用相关函数,以达到实现相关功能的目的。 。2、流程图: 、mai()函数: 2、创建: 3、插入: Y N Y 、查找:N Y N 5、中序遍历输出:三、算法描述 3。、存储结构定义一个链表式的二叉排序树,用链表的方式构造结点,存储二叉排序树中的结点
4、、结点类型和指针类型如下: icludestdi.h efienull0 typeef nt keytp; typd tuct node keytye ey; stuce *lcld,rchild; bstnode,*stree; 3、插入算法 在二叉排序树中插入一个新节点,首先要查找该节点在二叉排序树中是否已经存在。若二叉排序树中不存在关键字等于x的节点,则插入。 将一个关键字值为x的节点s插入到二叉排序树中,可以用下面的方法: (1)若二叉排序树为空,则关键字为x的节点成为二叉排序树的根 ()若二叉排序树非空,则将x与二叉排序树根进行比较,如果x的值等于根节点关键值,则停止插入;如果的根节
5、点值小于根节点关键值,则将x插入左子树;如果x的值大于根节点关键字的值,则将x插入右子树。在左右两个子树的插入方法与整个二叉排序树相同. 算法如下:odnser(tree t,kype ) bstre s;i(t=nl) s=(bstre)mlo(szof(stde));sey=x; lcild=nl; -rh=null;*t=s; ls if(cld),x); el i(t)ke) iert(((t)rchild),x); 3。、查找算法 (1)若二叉排序树不为空,将根结点的关键字与待查关键字进行比较,若相等,则查找成功;若根节点关键字大于待查值,则进入左子树重复次步骤,否则,进入右子树进行
6、此步骤;若在查找过程中遇到二叉排序树的叶子节点时,还没有找到待查节点,则查找不成功。 (2)否则,查找失败,返回ul. 算法如下:btreesarh(bstre,eytypex) bstre p; p=t;(!nul) if (x=pky) retun ey; else if(xpky) rtur search(p-chil,); elseeurn search(pcil,x); ls printf( a no efoundn,x);etrn nl; 3.4、删除算法 在二叉排序树中删除节点,首先要确定被删除的节点是否在二叉排序树中。若不在,则不做任何操作;否则,假设要删除的节点为p,节点p的
7、父节点为r,并假设是的左孩子。根据被删除节点p有无孩子,删除部分可做以下中情况讨论: (1)若p为叶子节点,则可令其父节点r的左孩子指针域为空,直接将其删除。(2)若p节点只有右子树或左子树,则可以将p的左子树或右子树直接改为其双亲节点r的左子树。()若既有左子树又有右子树;将节点s为p的中序前驱。首先找到p的中序前驱节点s,然后用节点s的值代替节点p的值,再将节点s删除,节点s的原左子树改为的双亲节点q的右子树。 算法如下:bstree delete(bsree ,keytype ) sreep,,r,s; p=t;r=null; wil(p) i(x=pkey)break; rp; i(x
8、key) p=plchild; else p=p-rcd; i(p=nul) pnf(”%s ot exst!n”,x);eur; f((-lhld=null)|(prcil=ull)) f(r=null) if(plhild=null) t=prcild; else t=lchild; elei(child=null) if(rlchil=p) -lchld=-rchld; lse rrchidpchild; else if(rlchil=p) rlchilplchild; else rlchld=plhil; free(p); ee q=p; s-cld;hile(s-hild) q=s;
9、scld; if(=p) chi=shi;ele pys-key; fre(s); retrn t; 四、小结与体会 经过一个多星期来夜以继日的努力,终于把课程设计-二叉排序树的相关算法全部完成!在编写程序过程中,让我对二叉排序树的创建、插入、查找、删除算法有了较系统的认识,也发现了一些以前纸上谈兵时的思想误区。比如实现插入功能时,从根节点开始比较;当实现删除功能时,如果待删除结点p左、右子树齐全,首先找到的中序前驱节点s(p的中序前驱),然后用节点s的值代替节点p的值,再将节点删除,节点s的原左子树改为s的双亲节点q的右子树。实现中序遍历功能时,采用递归思想。.。这是第一次关于编写程序的课程
10、设计。虽然上机安排只有两天时间,可却并不像平时上机实验一样,离开了机房就不用再对着电脑屏幕编写代码,更多的工作实在离开机房后完成的。一遍一遍地按调试程序,err从几十个减少到几个,再到只剩几个warrig,当按下tr+9,那精心设计的“菜单”出现在屏幕上时,那一刻的心情无以言表!涌上心头的除了自豪感、成就感之外,还有对编程工作之辛苦的慨叹!因为自己专业将来的方向与这有关,不免让我考虑起毕业后的发展方向。如果朝这方面发展的话,我是否可以胜任这样的工作?如果不是,又该选择什么?五、程序执行过程 .1、创建二叉排序树并中序输出 .2插入并中序输出 3、查找 .4、删除并中序输出 六、程序清单nclu
11、d sdo。hdefine nl tyedef it keytyp;typeefstutnode etype ke; tuct node *lcild,chid;btnod,*bstee;vd inset(btee t,keyyp x);btee earch(bsree ,keytypx);idsplay(sree );void eate(bstree*t) keytpe x; *t=nul; scanf(d,x); while(!=1) inset(t,x);canf(”d,x); vod inset(bsreet,ketype x) tree ; f(*=null) s=(bree)mal
12、o(sizef(sod));s-ke=x; s-hil=nl; child=nll; *s; esei(xey) nsert((*t)child),x); els if(x(t)-key)inser(&((*t)rhil),x);breeeach(tee ,eytyex) bste p; p; if(!=null) if(x=ke) ru pkey; le if(xpkey) reun sea(p-lchild,x);ese retrn search(p-rcid,x); else pritf( can ot efond,); urn nul;bstre dlte(bstee ,ketype
13、x) bstree ,q,r,s; =t; r=nll; hile(p) if(x=p-ke) bre; r=p; if(xey) p=plchild; else p=prcild; if(p=ull) prinf(d is ntxist!”,);retn ; if(plchd=nul)|(-rchild=null)) if(r=null) i(p-chil=null) t=p-rchild; els t=plhild; else if(lchild=nll) i(r-lchid=p) -lch-rcil; se r-rchld=pchld; elseif(child=p) lchild=pl
14、hild; else rhl=p-lhid; free(p); se p; s-id; while(s-rchld) q=s;rchld; if(=) -hild=schild; ele pkey=k; fe(s); rtun t;void dsply(bee t) (!=nll) dispay(tlchld);printf(”%5d,k); iplay(trhid); void main(vid) bsree ,b; ni=1,j; keytype x; hile(i) pritf(n* * * * * * * * * *n”);pntf(”n* MENU OF BREE n”);rintf
15、(”n 。create inst n); pntf(n 3。search 。le n); prinf(n* 5。eit *n”);printf(n* * * *); pritf(” wao you wanto d?:”);canf(d,&); wtch(j) ca 1: rntf(iubsesalus,en ih 1:n);reate(&t); rint(bstrees root s%d,tey);dspay(t);brek; cse 2:rintf(iut the nset alu:);ca(”,&);inr(&t,);dispay(t);break; cas 3: pritf(”nputthe earc value:);canf(d,x);print(rsulti: %,sech(t,);break; case 4:rintf(nput thedete value:”);scanf(d,); dee(t,x);dply(t);beak; case 5: i=0;brak; clrcr();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1