《数据结构与算法》课程设计成果报告-树与二叉树转换的实现2

上传人:re****.1 文档编号:464813609 上传时间:2023-07-24 格式:DOC 页数:25 大小:209.50KB
返回 下载 相关 举报
《数据结构与算法》课程设计成果报告-树与二叉树转换的实现2_第1页
第1页 / 共25页
《数据结构与算法》课程设计成果报告-树与二叉树转换的实现2_第2页
第2页 / 共25页
《数据结构与算法》课程设计成果报告-树与二叉树转换的实现2_第3页
第3页 / 共25页
《数据结构与算法》课程设计成果报告-树与二叉树转换的实现2_第4页
第4页 / 共25页
《数据结构与算法》课程设计成果报告-树与二叉树转换的实现2_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《《数据结构与算法》课程设计成果报告-树与二叉树转换的实现2》由会员分享,可在线阅读,更多相关《《数据结构与算法》课程设计成果报告-树与二叉树转换的实现2(25页珍藏版)》请在金锄头文库上搜索。

1、河南工程学院数据结构与算法课程设计成果报告树与二叉树转换的实现学生学号: 学生姓名: 学 院: 计算机学院 专业班级: 软件工程1341班 专业课程: 数据结构与算法 指导教师: 2014 年 12 月 29 日题 目树与二叉树转换的实现考核项目考核内容得分平时考核(30分)出勤情况、态度、效率;知识掌握情况、基本操作技能、知识应用能力、获取知识能力系统设计(20分)分析系统的功能模块编程调试(20分)实现系统的各个功能模块,并完成调试回答问题(15分)回答老师针对课程设计提出的问题课程设计报告撰写(10分)严格按照规范要求完成课程设计报告源代码(5分)按照规范要求完成课程设计源代码的排版总

2、评 成 绩指导教师评语: 日期: 年 月 日目 录第1章 课程设计目标与任务11.1 课程设计目标11.2 课程设计任务11.3 课程设计所用设施1第2章 分析与设计22.1 题目需求分析22.2 存储结构设计22.3 算法描述32.4 程序流程图5第3章 程序清单6第4章 测试104.1 测试数据104.2 测试结果分析12第5章 总结13第1章 课程设计目标与任务1.1 课程设计目标通过本课程设计,使学生在数据结构的选择和应用、算法的设计与实现方面得到训练,加深对数据结构基本内容的理解和灵活应用,同时,在程序设计方法及上机操作方面受到比较系统严格的训练,培养软件工作所需要的动手能力。数据结

3、构课程设计是在学完数据结构课程之后的实践教学环节。该实践教学是软件设计的综合训练,包括问题分析,总体结构设计用户界面设计,程序设计基本技能和技巧。要求学生在设计中逐步提高程序设计能力培养科学的软件工作方法学生通过数据结构课程设计各方面得到锻炼:(1)能根据实际问题的具体情况结合数据结构课程中的基本理论和基本算法,正确分析出数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法;(2)通过上机实习,验证自己设计的算法的正确性,学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改;(3)培养算法分析能力,分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平;(4)尽

4、可能借助语言环境实现图形显示功能,以便将抽象的数据结构以图形方式显示出来,将复杂的运行过程以动态方式显示出来,获得算法的直观感受。1.2 课程设计任务根据提供的实习题目,认真完成软件设计的全部过程,并以最终软件设计成果来证明其独立完成实际任务的能力,从而,反映出理解和运用数据结构与算法的水平和能力,最后完成软件设计和程序调试并提交文档:课程设计报告书,报告书中包含设计的算法及部分程序代码。1.3 课程设计所用设施PC机、VC6.0语言编辑、编译运行工具、文档编辑软件等。第2章 分析与设计根据课程实训要求,分析和设计能够完成实验要求的程序,下面是每个具体操作过程的主要内容。2.1 题目需求分析根

5、据所提供的题目,是要实现树与二叉树的转换,而且可以在程序设计中调用使用。学生要认真完成能够实现题目要求的函数库。由于二叉树和树都可以使用二叉链表作为存储结构,则二叉链表作为媒介可导出树与二叉树之间的一个对应关系。给定一棵树,可以找到唯一的一棵二叉树与之对应。2.2 存储结构设计(1)设置头文件:#include#include#include(2)设置常量:#define MAX_TREE_SIZE 100(3)一般树的存储结构有以下几种:双亲结点,孩子结点,孩子兄弟结点,本实验运用到的是双亲结点和孩子兄弟结点,具体存储结构如下:Typedef structint data,parent/双亲

6、位置域;PTNode;双亲表示法树结构:Typedef structPTNode nodeMAX_TREE_SIZE;int count;PTree;树的孩子兄弟结点表示结点结构定义:Typedef struct node int data; struct node *firstchild;struct node *rightsib;BTNode,*BTree;2.3 算法描述按照程序执行先后顺序进行描述(1)树的构建完成后,用孩子兄弟表示法对树进行初始化结点,所用到的方法是:BTNode GetTreeNode(int x) BTNode t;t.data =x;t.firstchild =

7、t.rightsib =NULL;return t;(2)树创建成功后,进行树的先序遍历,如果树不为空,先访问根结点,再先序遍历左子树,然后先序遍历右子树。先序遍历二叉树基本操作方法是递归算法,使用的方法是:void preorder(BTNode *T) if(T!=NULL)preorder(T-firstchild );preorder(T-rightsib );(3)树的后序遍历中,如果树不为空,首先后序遍历左子树,再后序遍历右子树,然后访问根结点,使用的方法是:void inoeder(BTNode *T) int i;for(;i=T.count-1;i-)printf(%d,T.

8、nodei);(4)树的层次遍历,如果二叉树非空,将根指针入队进行循环,直到队列为空,其方法是:void level(PTree T) int i;for(i=0;iT.count;i+)printf(%d,T.nodei);(5)用双亲表示法表示树,创建一维数组表示法,数组的元素具有两个数据域data和双亲位置域parent,每一个元素对应一个数组下标,其方法是:PTree CreatTree(PTree T) int i=1;int fa,ch;PTNode p;for(i=1;ch!=-1;i+)T.nodeT.count.data=p.data;T.nodeT.count.parent

9、=p.parent;(6)实现一般树转换成二叉树,树中的每个结点最多只有一个最左边的孩子和一个右邻的兄弟,每个结点的兄弟指针指向它的一个兄弟,每个结点仅有一个孩子指针,让它指向自己最左边的孩子,这样就可以呈现出一棵二叉树,其方法是:BTNode *change(PTree T) int i,j=0;BTNode pMAX_TREE_SIZE;BTNode *ip,*is,*ir,*Tree;ip=(BTNode*)malloc(sizeof(BTNode);is=(BTNode*)malloc(sizeof(BTNode);Tree=(BTNode*)malloc(sizeof(BTNode)

10、;Tree=&p0;return Tree;(7)实现调用功能的主函数,可以实现对一般树的转换,进行先序遍历、后序遍历、层次遍历、水平输出二叉树、返回主菜单以及退出程序等功能,方法是:void main()int i=0,c1,c2;PTree T;BTNode *Tree;init_ptree(&T);loop:Menu();scanf(%d,&c1);switch(c1)case 1:Menu2();scanf(%d,&c2);if(c2=9)goto loop;else if(c2=0)exit(1);最后进行调试和修改,进行执行操作。2.4 程序流程图根据课程要求,整理出思维路线。首先

11、创建一个覆盖全部操作功能的“主菜单”,在菜单中,可以调用各个操作的方法,其中的方法包含完成课程要求的创建树,遍历树。在一般树创建成功之后,按照格式输入各个结点,运行之后显示出所要求的内容。最后调用“副菜单”方法,进行接续执行或退出程序操作,从而达到最终实现整个课程要求的目的。开始退出程序主菜单双亲法建树先序遍历(递归)后序遍历(递归)先序遍历(非递归)后序遍历(非递归)层次遍历按照格式输入各个结点输出遍历结果输出树的结点情况副菜单退出程序图2.4.1 程序流程图第3章 程序清单#include #include #include #define MAX_TREE_SIZE 100/树的双亲表示

12、结点结构定义typedef structint data;int parent;/双亲位置域PTNode;/双亲表示法树结构typedef structPTNode nodeMAX_TREE_SIZE;int count;/根的位置和结点个数PTree;/树的孩子兄弟表示结点结构定义typedef struct nodeint data;struct node *firstchild;struct node *rightsib;BTNode,*BTree;void init_ptree(PTree *tree)tree-count =-1; /初始化树结点(孩子兄弟表示法)BTNode Get

13、TreeNode(int x)BTNode t;t.data =x;t.firstchild =t.rightsib =NULL;return t;/树的先序遍历(递归)void preorder(BTNode *T)if(T!=NULL)printf(%d,T-data );preorder(T-firstchild );preorder(T-rightsib );/树的先序遍历(非递归)void preorder2(PTree T)int i;for(i=0;ifirstchild);printf(%d,T-data);inoeder(T-rightsib );/树的后序遍历void inoeder2(PTree T)int i;for(;i=T.count-1;i-)printf(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号