二叉树数据结构课程设计报告.docx
- 文档编号:30728781
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:12
- 大小:87.24KB
二叉树数据结构课程设计报告.docx
《二叉树数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《二叉树数据结构课程设计报告.docx(12页珍藏版)》请在冰豆网上搜索。
二叉树数据结构课程设计报告
数据结构课程设计报告
题目:
线索二叉树的应用
院(系):
计算机工程学院
专业:
嵌入式系统软件设计方向
班级:
嵌入式109
(1)
学生:
黄江彬
指导教师:
寇海洲殷路
邱军林孙成富
2010年12月
目录
1.设计目的3
2.总体设计3
2.1首先创建一个线索二叉树3
2.2功能函数的实现4
3.调试分析7
4.测试结果7
5课程设计小结.10
1.设计目的
线索二叉树的应用:
创建线索二叉树,实现二叉树的建立,插入,删除,恢复线索的算法。
2.总体设计
实现过程和步骤提示:
2.1首先创建一个线索二叉树
2.1.1功能说明:
程序首先显示创建线索二叉树的界面,并等待用户输入命令(见图1-1所示)。
假如用户输入ABCE##F##D##G##,程序将在显示屏上输出运算结果(见图1-2所示)。
图1-1
图1-2
2.1.2创建线索二叉树的程序代码:
//创建二叉树ABD#GJ##K##E##C#FH##IL###ABCD##E###F#GH##I#J#K##
voidCreat(Bitree*p)//指向指针的指针
{
charch=getchar();
if(ch=='#')
(*p)=NULL;
else
{
//Bitreek;
*p=(Bitreenode*)malloc(sizeof(Bitreenode));
(*p)->data=ch;
Creat(&(*p)->lchild);
Creat(&(*p)->rchild);
}
//return1;
}
2.1.3创建线索二叉树系统菜单实现提示:
(1).遇“#”则该结点为空;
(2).直接从键盘获取字符串.
2.2功能函数的实现
2.2.1二叉树的遍历
2.2.1.1功能说明:
对用户输入的二叉树进行遍历
2.2.1.2二叉树的遍历程序代码:
//先序遍历
voidFirst(Bitreep)
{
if(p)
{
printf("%2c",p->data);
First(p->lchild);
First(p->rchild);
}
}
//中序遍历
voidMiddle(Bitreep)
{
if(p)
{
Middle(p->lchild);
printf("%2c",p->data);
Middle(p->child);
}
}
//后序遍历
voidLast(Bitreep)
{
if(p)
{
Last(p->lchild);
Last(p->rchild);
printf("%2c",p->data);
}
}
2.2.1.3遍历二叉树功能实现提示:
(1).用户输入二叉树后函数自动对所输入二叉树进行遍历。
2.2.2结点的删除
2.2.2.1功能说明:
删除二叉树中任意一个结点
2.2.2.2删除结点的程序代码
删除结点之前要对所要删除的结点进行查找
//在二叉树中查找值为x的结点
voidsearch(Bitree*q,charx,Bitree*p)
{
if((*q)->data==x)*p=*q;
else
{
if((*q)->lchild)search(&(*q)->lchild,x,&(*p));
if((*q)->rchild)search(&(*q)->rchild,x,&(*p));
}
//returnNULL;
}
查找到后进行删除操作(左右子树的删除操作类似)
//删除左子树
voidSearch_lchild(Bitree*p,charparents,Bitree*k)
{
if((*p)->data==parents)
{
if((*p)->lchild)
{
*k=(*p)->lchild;//查找左子树
//Deletel(*k);
}
}
else
{
if((*p)->lchild)Search_lchild(&(*p)->lchild,parents,&(*k));
if((*p)->rchild)Search_lchild(&(*p)->rchild,parents,&(*k));
}
}
voidDeletel(Bitree*p)
{
Bitree*t;
t=p;
if((*t))
{
Deletel(&(*t)->lchild);
Deletel(&(*t)->rchild);
free(*t);
//(*p)=NULL;
}
//(*p)=NULL;
}
2.2.2.3删除程序实现提示:
(1).键盘输入所要删除的结点,程序进行查找;
(2).执行删除操作。
2.2.3结点的插入
2.2.3.1功能说明:
在给定一棵二叉树中插入新结点
2.2.3.2插入结点的程序代码:
//插入左结点
voidInsert_lchild(Bitree*p,charchildl,charchild)
{
Bitreeq,k;
if(*p)
{
if((*p)->data==childl)//找到结点
{
q=(Bitree)malloc(sizeof(Bitree));
q->data=child;
if(!
(*p)->lchild)//左结点不存在
{
(*p)->lchild=q;
(*p)->lchild->lchild=NULL;
(*p)->lchild->rchild=NULL;
}
else//左结点存在
{
k=(*p)->lchild;
(*p)->lchild=q;
q->lchild=k;
}
}
else
{
Insert_lchild(&(*p)->lchild,childl,child);
Insert_lchild(&(*p)->rchild,childl,child);
}
}
}
2.2.3.3插入结点的程序实现提示
(1).输入新结点,指明所要插入的位置。
3.调试分析
在调试的过程中,对程序做了几点改进,增加了程序的容错能力,不论用户输入什么内容,程序都能安全检查。
4.测试结果
(1).创建二叉树
系统提示创建二叉树,如下图:
系统对用户输入的二叉树进行遍历,如下图:
(2).删除结点
对要删除的结点进行查找,如下图:
删除结点后的二叉树如下图:
(3).插入新结点
输入要插入的结点,如下图:
插入新结点后,结果如下:
5.课程设计小结
一个多星期的数据结构课程设计,我们在老师的指导下,共同努力,顺利完成该课程设计,感觉自己收获不少!
通过这次的课程设计,我强化了数据结构的知识,深刻理解了数据结构的重要性,只有真正理解这样定义数据类型的好处,才能用好这样一种数据结构。
了解典型数据结构的性质是非常有用的,它往往是编写程序的关键。
在这次实验中,我对参数的调用也进行了很多种尝试,已经差不多能够选择合适的参数形式来实现函数之间的数据传输交互了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 数据结构 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)