排序二叉树的应用数据结构课程设计报告Word文档下载推荐.docx
- 文档编号:15987155
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:25
- 大小:170.44KB
排序二叉树的应用数据结构课程设计报告Word文档下载推荐.docx
《排序二叉树的应用数据结构课程设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《排序二叉树的应用数据结构课程设计报告Word文档下载推荐.docx(25页珍藏版)》请在冰豆网上搜索。
4)如果k=1,转到5;
否则,把p的值填入其父结点的指针域中。
p的父结点地址为adr[k/2],若k为偶数,则做adr[k/2]->
lc=p;
若为奇数,则做adr[k/2]->
rc=p。
5)重复2~4,直到全部顶点数据输入完为止。
4、遍历二叉树,即如何按某条搜索路径寻访树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。
一棵非空二叉树是由根结点(D)、左子树(L)和右子树(R)三个基本部分组成。
要遍历这三个基本部分,可以有六种可能的顺序。
若限定先左后右,则只有三种情况:
先序遍历(DLR)、中序遍历(LDR)、后序遍历(LRD)。
在本程序中,遍历二叉树函数的核心是以一个简单的case语句来实现的。
5、二叉树的插入操作:
这个操作首先生成一个新的结点结构,把数据存入新结点,然后搜索二叉树寻找插入结点的位置,再把新结点连接到二叉树。
把这个操作定义为一个函数,其函数名为instree。
6、二叉树中元素的查找:
在许多情况下,我们需要在一棵已知的二叉树中查找某个元素,以确定树中是否存在这个元素。
这种查找与链表数据结构中查找成员的情况极类似。
查找函数名字定义为membertree。
7、从二叉树中删除一个成员:
进行成员删除操作时,首先必须用递归函数遍历这棵树,找到这个元素。
当找到这个元素之后,还要考虑以下四种不同的情况:
删除一个终端结点;
删除只有一个左孩子的结点;
删除只有一个右孩子的结点;
删除带有两个孩子的结点。
删除函数名字定义为deltree。
8、在主函数main()中,除了初始化指针tp之外,用循环语句while
(1)在屏幕上显示出主菜单:
I——Insertanelementintotree
D——Deleteanelementfromthetree
F——Findamemberinthetree
P——Printthetree
Q——Quit
用户可以根据自己的需要,从键盘键入不同的合法字母(例如‘I’),而进入不同的树处理函数进行处理。
不同树处理函数的选择是通过简单的switch-case语句来实现,其中包括了若错技术。
如果用户从键盘输入的不是’I’,’D’,’F’,’P’,’Q’这些合法字符,则程序会先告诉用户输入出错,让用户重新输入,直到输入选择正确为止。
三、设计思路
1、主函数main():
由case语句组成,支持程序选择,当运行时,可以执行有关二叉树的操作:
2、主要的树函数的说明部分
1)voidprttree(treeptrtnode,intt);
//打印树。
该函数在屏幕上打印出存放在树中的元素,如果是空树,则无输出。
参数:
tnode-指向根结点的指针;
t-打印方式:
0:
前序1:
中序2:
后序(用递归算法遍历二叉树)。
2)treeptrinstree(char*s,intkey,treeptrtnode);
//插入一个元素。
该函数把一个元素插入到二叉树中。
s,key-接收插入数据;
tnode-是指向根结点的指针。
3)treeptrmembertree(char*s,treeptrtnode);
//查找一个元素。
该函数测定树中的指定元素,如果元素是树中的成员,则函树返回该元素,否则返回NULL指针.。
s-指向要找的那个串的指针;
tnode-指向树根结点的指针。
4)treeptrdeltree(char*s,treeptrtnode);
//删除一个元素。
该函数删除一个结点。
s-要删除的结点的数据域的值;
tnode-指向根结点的指针。
5)treeptrfindinspos(char*s,treeptrtnode);
//该函数寻找一个元素要插入的位置。
四、流程图
1、main()函数
‘I’‘P’‘D’‘F’‘Q’
其
它
输入输入s
s
printf
tp==deltree
YN(s,tp)t==membe
-tree(s,tp)
printfprintfbreak
Yt!
=NULLN
输入printfprintf
任意数输入i
break输入
任意数
prttree(tp,i)
break
输入任意数
2、主要树函数
1)prttree()函数
开始
tnode
Y!
=NULLN
t
‘0’‘1’‘2’
prttree(tnodprttree(tnode
printf-e->
left,t)->
left,t)
prttree(tnodprintfprttree(tnod
-e->
left,t)-e->
right,t)
prttree(tnodprttree(tnod
right,t)-e->
right,t)printf
结束
2)instree()函数
为t1分配
空间
Yt1==NULLN
printft1->
right
=NULL
printft1->
left=NULL
returnt1->
key
(tnode)=key
strcpy(t1->
data,s)
Ytnode==NULLN
returnt2=findinspos(s,tonde)
(t1)
Y(strcmp(t2-data,s))<
=0N
t2->
right=t1t2->
left=t1
return(tnode)
3)membertree()函数
开始
t=tnode
N
t!
Y
cmp=strcmp(t->
Ycmp==0N
return(t)Ycmp<
0N
t=t->
rightt=t->
left
return(NULL)
4)findinspos()函数
Y(strcmp(tnode->
data,s))>
=0N
Ytnode->
left==NULLNYtnode->
right==NULLN
return(tnode)findinspos(s,tnode->
left)return(tnode)findinspos(s,tnode->
right)
结束
5)deltree()函数
tnode==NULL
ch=strcmp(tnode->
Ych==0N
ch>
free(tnoY无左孩子Ntnode->
left=deltnode
-de->
-tree(s,tnode->
left)-right
data)=deltree
t1=tnode->
Y无右孩子N(s,tnode
right->
right)
t1=tnot1=tnode
free(tn-de->
->
righ
-ode)free(tnoleft
-de->
da
-ta)t2=tnode
returnfree->
(NULL)(tnode->
freedata)
(tnode)t2->
left!
freeY
return(tnode)
(t1)t2=t2->
return
(t1)t2->
left=
tnode->
free(tnode->
data)
free(tnode)
return(t1)
五、源程序
程序清单:
#include<
conio.h>
stdio.h>
alloc.h>
stdlib.h>
string.h>
typedefstructtreenode*treeptr;
//重定义机构指针类型为treeptrstructtreenode//树结点的基本数据结构
{
intkey;
//数据域
chardata[20];
treeptrleft,right;
//左,右指针
};
//主要的树函数的说明部分
voidprttree(treeptrtnode,intt);
treeptrinstree(char*s,intkey,treeptrtnode);
treeptrmembertree(char*s,treeptrtnode);
treeptrdeltree(char*s,treeptrtnode);
treeptrfindinspos(char*s,treeptrtnode);
main()
treeptrtp,t;
charch;
chars[80];
inti;
tp=NULL;
//初始化根结点指针
while
(1)
{
clrscr();
gotoxy(20,5);
printf("
I-Insertanelementintothetree"
);
gotoxy(20,6);
D-Deleteanelementfromthetree"
gotoxy(20,7);
F-Findamemberinthetree"
gotoxy(20,8);
P-Printthetree"
gotoxy(20,9);
Q-Quit"
gotoxy(20,12);
print("
Makeaseletion>
>
"
ch=g
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 排序 二叉 应用 数据结构 课程设计 报告