数据结构课程设计报告二叉树根节点到指定节点的路径.docx
- 文档编号:30599086
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:12
- 大小:35.83KB
数据结构课程设计报告二叉树根节点到指定节点的路径.docx
《数据结构课程设计报告二叉树根节点到指定节点的路径.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告二叉树根节点到指定节点的路径.docx(12页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告二叉树根节点到指定节点的路径
数据结构课程设计报告-二叉树根节点到指定节点的路径
数据结构课程设计报告二叉树根节点到指定节点的路径――递归调用思想班级:
—软件092姓名:
_
指导教师:
—成绩:
信息工程学院2011年6月17日-2-摘要(题目):
二叉树根节点到指定节点的路径1.引言二叉树是n个结点
的有穷个集合,它或者是空集(n=0),或者同时满足以下两个条件;
(1)有且仅有一个称为根的结点;
(2)其余结点分为两个互不相交的集合T1,T2,并且T1,T2,都是
二叉树,分别称为根的左子树和右子树。
二叉树形结构在
客观世界中大量存在,如行政组织机构和人类社会的家谱关系等都可用二叉树结构形象地表示。
在计算机应用领域,二叉树也被广泛地应用。
例如在编译程序中,可用二叉树
来表示源程序的语法结构;在数据库系统中,可用二叉树来表示组织信息;在计算机图形学中,可用二叉树来表示图
像关系等。
因此对二叉树的研究具有重要意义。
2.需求分析
利用一个简单的菜单,通过菜单项进行选择,实现和完成如下功能:
用先序输入,建立二叉树存储结构、求指定结点
的路径。
对于建立二叉树存储结构,考虑到栈和队列的存储结构比较繁琐,从而定义一指针数组来存储该二叉
树先序遍历过的结点,并对该结点进行判断是否为指定的目标结点,并进行输出等操作。
3.概要设计对二叉树采用链
式存储结构,其结构定义如下:
typedefstruct
node{DataTypedata;structnode
*lchild,*rchild;}BinTNode,*BinTree;每个结点中设置三个
域,即值域data,左指针域*lchild和右指针域*rchild。
本程序分为6大模块:
全局变量定义、创建结构体、创建二叉链表存储表示、查找目标结点、求结点路径、主函数。
(1)全局变量定义
(2)创建结构体(3)创建二叉链表存储表
示:
定义二叉树的链式存储结构,输入数据生成二叉树。
(4)
查找目标结点:
采用二叉链表作为存储结构,利用递归方法,
对各个结点进行判断改结点是否在二叉树中。
-3-(5)
求结点路径:
采用二叉链表作为存储结构,利用先序遍历二叉树方法以及指针数组的存储结构方法,对结点路径的遍
历查找及输出。
(6)主函数程序流程图重要函数有主
函数intmain()输入函数scanf()输出函数printf()二叉树的先序建立函数CreateBiTree()结点查找函数
FindBT()求结点路径函数NodePath()4.详细设计
(1)
定义二叉树用链式存储结构存储二叉树。
其中,了lchild和
rchild是分别指向该结点左孩子和右孩子的指针,data是数
据元素的内容。
定义二叉树结点值的类型为字符型且结点个数不超过100个,具体实现方法如下:
二叉树的根节点到
指定节点的路径主程序代码输入函数输出函数
建立函数查找函数求路径函数-4-typedefstructnode{DataTypedata;structnode
*lchild,*rchild;}BinTNode,*BinTree;
(2)建立二叉树创
建二叉链表存储的二叉树。
按二叉树带空指针的先序次序输入结点值,结点类型为字符型。
按先序次序输入,其中“@
表示空结点。
算法是按照先序遍历思想设计的。
构造二叉链表表示的二叉树,“@符号表示空树。
具体实现方法如下:
StatusCreateBiTree(BinTree&bt){charch;printf("ch=");scanf("%c",&ch);getchar();if(ch==@)bt=NULL;else{bt=(BinTNode*)malloc(sizeof(BinTNode));bt->data=ch;
//生成根结点CreateBiTree(bt->lchild);//构造左子树
CreateBiTree(bt->rchild);//构造右子树}returnOK;}(3)
查找函数-5-函数功能是用递归方法对二叉树进行先序遍
历查找,调用此函数可以返回二叉树中指定目标结点。
算法
思想:
若找到目标结点,贝U返回该目标结点;否则访问二叉树的根结点;先序遍历根的左子树;先序遍历根的右子树。
具体实现方法如下:
voidFindBT(BinTreebt,DataTypex)
{if((bt!
=NULL)&&!
found){if(bt->data==x)
{p=bt;found=1;}else{FindBT(bt->lchild,x);//遍历查找左
子树FindBT(bt->rchild,x);//遍历查找右子树}}}
BinTNode*Findx(BinTreebt,DataTypex){//按给定值查找
结点intfound=0;//用found来作为是否查找到的标志BinTreep=NULL;//置空指针FindBT(bt,x);return(p);}7)
求指定结点路径:
该函数功能是根据已创建的二叉树和输
入的目标结点,调用此函数可以查找并输出目标结点的路径。
算法思想:
根据先序遍历二叉树的递归定义,采用一个指针数组来保存返回的结点。
先扫描根结点的左子树上
的结点并写入指针数组。
判断该结点是否与指定目标结点相等,若不相等,然后扫描该结点的右结点并写-6-入指针
数组,再扫描该右结点的所有左结点写入指针数组。
当一个结点的左孩子树均访问完后再访问该结点,并与给定的结
点比较。
若相等,贝y循环输出指针数组中的所有元素,而这个顺序值就是要求的路径。
若不相等,则继续上述过程。
具体实现方法如下:
voidNodePath(BinTreebt,BinTNode
*ch){//求二叉树根结点到给定结点*p的路径typedef
enum{FALSE,TRUE}boolean;BinTNode*stack[num];//定义指针数组inttag[num];inti,top;booleanfind;BinTNode
*s;find=FALSE;top=0;s=bt;do{while(s!
=NULL){//扫描
左子树top++;stack[top]=s;tag[top]=0;s=s->lchild;}if(top>0){s=stack[top];if(tag[top]==1)-7-{if(s==ch)
{//找到ch,则显示从根结点到ch的路径
for(i=1;i<=top;i++)printf("->%c",stack[i]->data);find=TRUE;}elsetop--;s=stack[top];}//endifif(top>0&&!
find){if(tag[top]!
=1){s=s->rchild;//扫描右子树
tag[top]=1;}elses=NULL;}//endif}//endlif}while(!
find&&top!
=0);}(8)主函数:
-8-该函数为程序的主函数
功能是循环输出菜单,功能界面;从界面获取功能菜单中对应的字符,通过switch()语句实现对函数的调用,进而实现功能。
具体代码如下:
intmain(){boolisStop;BinTreebt;
charchi;intxz=1;printf("\t
***********************************************
**™***\n");printf("\t*\t\t\t\t\t\t\t*\n");printf("\t
*\t\t欢迎来到这里\t\t*\n");printf("\t*\t\t建立二叉树
并求指定结点路径\t\t*\n");printf("\t*\t\t\t\t\t\t\t*\n");
printf("\t
***********************************************
printf("\n\n");printf("
=============\n");-9-printf("1.建立二叉树的存
储结构\n");printf("2.求二叉树指定结点的路径\n");
printf("O.ExitSystem!
\n");printf("
=============\n");printf("请选择:
(0-2)\n");
scanf("%d",&xz);getchar();switch(xz){case1:
printf("输
入二叉树的先序序列结点值:
\n");CreateBiTree(bt);printf("
二叉树的链式存储结构建立完成!
\n");printf("\n");break;
case2:
printf("路径的节点值是:
\n");ch仁getchar();
p=NULL;found=0;Findx(bt,ch1);if(p!
=NULL)-10-NodePath(bt,p);elseprintf("没有要求的节点!
\n");
printf("\n");break;}//switch}//while}源程序:
#include#include#definenum100#defineOK1typedefintStatus;typedefcharDataType;typedefstructnode{DataTypedata;structnode*lchild,*rchild;}BinTNode,*BinTree;intfound;BinTNode*p;StatusCreateBiTree(BinTree&bt)-11-{charch;printf("ch=");scanf("%c",&ch);getchar();if(ch==@)bt=NULL;else{bt=(BinTNode*)malloc(sizeof(BinTNode));bt->data=ch;//生成根结点CreateBiTree(bt->lchild);//构
造左子树CreateBiTree(bt->rchild);//构造右子树}return
OK;}voidNodePath(BinTreebt,BinTNode*ch){//求二叉树根结点到给定结点*p的路径typedefenum{FALSE,TRUE}boolean;BinTNode*stack[num];//定义栈inttag[num];inti,top;booleanfind;BinTNode*s;
find=FALSE;top=0;s=bt;-12-do{while(s!
=NULL){//扫描左子树top++;stack[top]=s;tag[top]=0;
s=s->lchild;}if(top>0){s=stack[top];if(tag[top]==1){if(s==ch){//找到ch,则显示从根结点到ch的路径for(i=1;i<=top;i++)printf("->%c",stack[i]->data);
find=TRUE;}elsetop--;s=stack[top];}//endifif(top>0
&&!
find){-13-if(tag[top]!
=1){s=s->rchild;//扫描右子
树tag[top]=1;}else
s=NULL;}//endif}//endlif}while(!
find&&top!
=0);}voidFindBT(BinTreebt,DataTypex){if((bt!
=NULL)&&!
found){if(bt->data==x){p=bt;found=1;}else
{FindBT(bt->lchild,x);//遍历查找左子树
FindBT(bt->rchild,x);//遍历查找右子树}}}-14-
BinTNode*Findx(BinTreebt,DataTypex){//按给定值查找
结点intfound=0;//用found来作为是否查找到的标志BinTreep=NULL;//置空指针FindBT(bt,x);return(p);}intmain(){boolisStop;BinTreebt;charch1;intxz=1;printf("\t
***********************************************
**™***\n");printf("\t*\t\t\t\t\t\t\t*\n");printf("\t
*\t\t欢迎来到这里\t\t*\n");printf("\t*\t\t建立二叉树
并求指定结点路径\t\t*\n");printf("\t*\t\t\t\t\t\t\t*\n");
printf("\t
***********************************************
***********\n");-15-while(xz){/*****输出菜单,功能
*****/printf("\n\n");printf("
=============\n");printf("1.建立二叉树的存储结
构\n");printf("2.求二叉树指定结点的路径\n");printf("
O.ExitSystem!
\n");printf("
=============\n");printf("请选择:
(0-2)\n");
scanf("%d",&xz);getchar();switch(xz){case1:
printf("输
入二叉树的先序序列结点值:
\n");CreateBiTree(bt);printf("
二叉树的链式存储结构建立完成!
\n");printf("\n");break;-
16-case2:
printf("路径的节点值是:
\n");ch仁getchar();p=NULL;found=0;Findx(bt,ch1);if(p!
=NULL)
NodePath(bt,p);elseprintf("没有要求的节点!
\n");
printf("\n");break;}//switch}//while}5.测试结果-17-
-18-6.调试分析本设计是先序输入的,当然也可以中序和后序输入,为了减小时间和空间复杂度,所以只设计了先序输入。
对于先序,中序,后序等访问,需要的话,也可以按要求加入。
本设计的缺点是,输错了的话,要重新输入。
7.设计体会虽然都说程序=数据结构+算法”,但我们在学习运用数据结构编程之前,并没能深刻体会到这一点,直到这次课设实践。
我们感受最深的一点是:
以前用C编程,
只是注重如何编写函数能够完成所需要的功能,似乎没有明确的战术,只是凭单纯的意识和简单的语句来堆砌出一段程序。
还体会到深刻理解数据结构的重要性。
只有真正理解这样定义数据类型的好处,才能用好这样一种数据结构。
了
解典型数据结构的性质是非常有用的,它往往是编写程序
的关键。
以前对递归算法一直很害怕,总是看不明白究竟这递归是怎么进行的。
在这次实验中终于克服了这一障碍,一次次单步执行书中递归函数的例子,并一遍遍在心中自己
默默的走,终于弄明白了,真的是功夫不负有心人啊!
同时还根据自己的理解写出了类似的递归函数实现了新的功能,真是受益良多啊!
在这次实验中,对参数的调用也进行了很多种尝试,已差不多经能够选择合适的参数形式来实现函数之间的数据传输交互了。
这次实验中也出现过一些比较
严重的错误。
在主函数调用CreateBiTree(&bt)的参数&bt误写成元素bt,在调试程序时给我们团队带来一定的
封面
山东建筑大学
2009级工程造价专业毕业设计任务书
题目:
山东省职业技术学院办公楼工程项目
商务标书
设计期限:
自2011年7月
至2011年10月
班级:
0720913141学生姓名:
学号:
指导教师(签字):
任成友
庄春华
山东建筑大学毕业设计任务书
班级
学生姓名指导教师张琳
设计题目
山东省职业技术学院办公楼工程项目商务标书
计始数设原参
1、工程概况
山东省职业技术学院办公楼项目概况:
(1)建设单位:
建达房地产开发有限公司
2)本工程为办公楼,具体位置详见规划总平面图
3)本工程总建筑面积5195.74平方米
4)本工程五层,一层层咼4.2m,—--四层咼3.9m,五层层咼4.2m,建筑咼度29.74m,室内外咼差0.60m。
5)本工程结构形式:
框架结构,抗震设防烈度:
6度
6)本工程建筑等级:
三级;耐火等级:
为二级。
7)本工程设计使用年限:
3类(合理使用50年)
8)屋面防水等级:
二级
2、工程特点
本工程为重点工程,业主要求尽量采用施工新技术并要求必须按合同工期完工。
施工现场狭小,应考虑合理利用现场空间。
3、资金筹措条件
(1)工程合同价C=工程报价;
(2)开工前业主拨付工程备料款A=20%C;
(3)工程进度款,每月末按形象进度延迟一个月拨付;
(4)不足部分通过银行贷款补足,贷款利率=12%(单利);
(5)不考虑保修金的留设。
(6)现场条件:
已实现三通一平.
(7)工程量清单
(8)施工图(另附)
设计工作内容
1、撰写招标文件,编制工程量清单
以施工图纸为依据,根据国家标准《建设工程工程量清单计价规范》、及山东省现行消耗量定额进行编制。
鼓励学生在完成手工预算的全部工作的基础上,另用工程造价编制软件对手算的结果进行校审复核。
工程量清单编制的内容有;
(1)封面;
(2)总说明;
(3)分部分项丄程量清单;
(4)措施项目清单;
(5)其他项目清单;
2、编制投标文件
投标文件只编写商务标部分
(1)商务部分主要包括下列内容:
1)投标函:
2)建安工程唱标单;
3)法定代表人资格证明书;
4)法定代表人授权书;
5)投标保证金。
6)报价单
(2)商务标编制:
计算工程量;确定综合单价;进行投标报价;编制报价汇总表,和各类投标报价单价表。
投标报价说明;投标报价汇总表;主要材料清单报价表;分部分项工程量清单报价表;措施项目报价表;其他项目报价表;规费与税金工程量清单项目报价表。
计作本求设工基要
1毕业设计程序的要求
(1)设计准备阶段
毕业设计题目选定后,应由指导教师向学生下达毕业设计指导书。
学生根据毕业设计指导书的选题和指导教师的安排,应该做好如下的准备,包括:
认真阅读毕业设计任务书的内容,熟悉施工图纸,调查了解与设计内容相关的资料;收集相关的工具书。
包括设计规范、施工规范、预算定额、工程估价表、标准图集、相关的造价文件和有关材料的市场价格等。
同时了解毕业设计的进度安排和答辩时间。
(2)毕业设计阶段
1)根据毕业设计任务书的要求,准备相关资料。
2)根据图纸和相关文件,编制工程量清单。
3)根据图纸和相关资料,编制投标文件。
4)汇总装订,形成毕业设计文件。
(3)毕业答辩阶段
毕业答辩是学生毕业设计的总结和回顾,要求学生做好下列工作:
1)编写毕业设计说明书,内容包括对毕业设计任务书的理解、毕业设计的总体思路、在设计过程中的参考资料及对有关问题的处理意见和毕业设计的体会。
要求语言简练,步骤清晰。
2)参加毕业答辩,要求学生应该对毕业答辩做好充分的准备,在答辩时,首先简要的陈述毕业设计的课题名称、设计要求、设计思路及设计过程和设计成果。
其次要准备回答答辩教师与设计内容相关的问题。
2、毕业设计成果的要求
毕业设计是学生在校学习的最后阶段,是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的系统训练和考察过程。
毕业设计是学生在老师指导下,对所从事工作和取得成果的完整表述,毕业设计的撰写是学生基本能力训练的过程,应当符合国家及有关行业(部门)指定的有关标准,符合汉语语言规范。
3、毕业设计成果应包括:
①标题②摘要③关键词④目录⑤正文⑥参考文献等部分。
设计进程安排
第一阶段完成清单工程和定额消耗量工程,整理好工程量草稿第二阶段应该是用广联达编制工程量清单、招标控制价及投标报价第三阶段答辩
主要
参考资料及文献
1•建筑工程项目管理规范(GB/T50326-2006)
2•相关的建筑标准图集和做法。
3.相关的建筑工程规范和质量标准.
4.工程量清单计价规范、消耗量定额及有关规定。
5•山东建筑大学教师教学工作手册(上)(2006年版).
6.山东建筑大学优秀毕业设计(论文)集。
7•相关建设工程法律、法规。
8.其他相关资料与文献。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 二叉 树根 节点 指定 路径