c语言数据结构课程设计二叉树,数据结构课程设计二叉树遍历C语言.doc

本文档详细介绍了二叉树的课程设计,包括使用C语言实现二叉树的建立、前序、中序、后序及层次序遍历。设计中结合了递归与非递归算法,并利用栈和队列结构,展现了数据结构在二叉树操作中的应用。通过此设计,作者提升了数据处理能力和对数据结构的理解,为后续面向对象编程奠定了基础。
摘要由CSDN通过智能技术生成

数据结构课程设计二叉树遍历C语言

淮阴工学院实践报告

数据结构课程设计

设计题目:二叉树遍历

系 别: 计算机工程学院

专 业: 软件工程

班 级: 软件1111

学生姓名: 周淼 学 号: 1111315217

起止日期: 2012年12月24日~2012年12月30日

指导教师: 寇海洲

摘要:

现代社会生活中,计算机扮演着重要角色,而随着计算机运行速度的不断加快,对数据的处理能力也日益增强,因此,程序所涉及的数据成爆发式增长。随之而来的问题就是如何科学有效的对数据进行操作,使得计算机的时间和空间利用率最高。针对这样的问题,我选择了二叉树对数据的各种操作作为我的课程设计主题,希望通过课程设计来提高对数据的处理能力,促进对数据结构课程的理解,在日后面向对象的程序设计中科学的规划数据结构。在本次课程设计中,二叉树的建立使用了递归算法,遍历则同时使用了递归与非递归的算法,同时,在遍历算法的实现中使用了栈结构与队列结构,这大大方便了二叉树的遍历。在前序、中序、后续遍历算法中,分别实现了递归与非递归算法,从实际应用中体验了递归这一算法的优越性。

关键词:二叉树建立,递归与非递归,遍历,栈,队列

编号: 47

淮阴工学院 软件工程 专业

数据结构课程设计答辩记录

课题名称: 二叉树的算法

班 级 软件1111 学 号 1111315217 姓 名 周淼

答 辩 记 录

问题1:课题中涉及到哪些数据结构和算法?

答: 1)数组,二叉树,栈,队列,线性表

2)二叉树的中序、前序、后序的递归、非递归遍历算法,层次序遍历非递归算法,栈、队列的实现算法

问题2:课题研究和设计中的关键技术是什么?

答:关键技术是二叉树的建立,以及栈结构、队列的算法实现

问题3:课题的主要功能和模块有哪些?

答:1)主要功能:根据数据建立二叉树,实现二叉树的中序、前序、后序遍历

2)模块:栈的应用,队列结构的应用,二叉树的操作

问题4:课题在实现过程中遇到的主要难点有哪些?

答:遍历二叉树过程中栈结构以及队列的使用

问题5:课题中未能实现的功能有哪些?

答:以树形结构输出完全二叉树 记录人:寇海洲 2012 年 12 月 28日

目录

1需求分析5

1.1二叉树与树结构5

1.2面向对象的程序设计5

1.3二叉树遍历的应用5

1.4软件运行环境:Visual C++ 6.0版本5

2概要设计6

2.1 总体功能结构6

2.2数据结构部分设计6

2.2.1结点结构6

2.2.2 二叉树结构7

3详细设计12

3.1建立二叉树12

3.1.1功能描述12

3.1.2算法原理12

3.1.3 具体程序12

3.2 前序遍历13

3.2.1 功能原理13

3.2.2 算法原理13

3.2.3 具体程序13

3.3 中序遍历14

3.3.1 功能原理14

3.3.2 算法原理14

3.3.3 具体程序14

3.4 后序遍历15

3.4.1功能原理15

3.4.2 算法原理15

3.4.3 具体程序16

3.5层次序非递归遍历17

3.5.1 功能原理17

3.5.2 算法原理17

3.5.3 具体程序17

3.6 栈结构18

3.6.1 功能原理18

3.6.2算法原理18

3.6.3 具体程序18

3.7 队列结构19

3.7.1 功能原理19

3.7.2 算法原理19

3.7.3 具体程序19

4调试与操作说明20

致 谢23

参考文献24

附录:25

1需求分析

1.1二叉树与树结构

树结构的是建立在数据逻辑结构基础上的数据结构类型,二叉树则是树结构中最常见和使用最多的类型。通过对二叉树的操作,可以实现多种数据操作,如排序、查找等。

一个好的二叉树遍历算法应包含以下功能:

1)以递归和非递归方法建立二叉树或完全二叉树;

2)实现二叉树的前序遍历、中序遍历、后序遍历;

3)每种遍历算法皆以递归和非递归方法实现;

4)在具体实现时应用其他数据结构类型对数据进行操作,如:栈,队列,数组。

1.2面向对象的程序设计

在面向对象的程序设计中,模板的使用很普遍,因此,如何在程序设计中使用模板使得方法的实现与定义分开,程序模块化,既方便了程序设计者,又为程序的后期维护带来便利。

树状显示二叉树: 编写函数displaytree(二叉树的根指针,数据值宽度,屏幕的宽度)输出树的直观示意图。输出的二叉树是垂直打印的,同层的节点在同一行上。 [问题描述] 假设数据宽度datawidth=2,而屏幕宽度screenwidth为64=26,假设节点的输出位置用 (层号,须打印的空格数)来界定。 第0层:根在(0,32)处输出; 第1层:因为根节点缩进了32个空格,所以下一层的偏移量(offset)为32/2=16=screenwidth/22。即第一层的两个节点的位置为(1,32-offset),(1,32+offset)即(1,16),(1,48)。 第二层:第二层的偏移量offset为screenwidth/23。第二层的四个节点的位置 分别是(2,16-offset),(2,16+offset),(2,48-offset),(2,48+offset)即(2,8),(2,24),(2,40),(2,56)。 …… 第i层:第i层的偏移量offset为screenwidth/2i+1。第i层的每个节点的位置是访问第i-1层其双亲节点时确定的。假设其双亲的位置为(i-1,parentpos)。若其第i层的节点是其左孩子,那末左孩子的位置是(i,parentpos-offset),右孩子的位置是(i,parentpos+offset)。 [实现提示] 利用二叉树的层次遍历算法实现。利用两个队列Q,QI。队列Q中存放节点信息,队列QI中存相应于队列Q中的节点的位置信息,包括层号和需要打印节点值时需要打印的空格数。当节点被加入到Q时,相应的打印信息被存到QI中。二叉树本身采用二叉链表存储。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值