- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++课程设计报告
——二叉树解决四则运算问题
班级学号姓名:周玥
二叉树解决四则运算问题
摘要 将四则运算表达式构造成二叉树的形式,通过后序遍历,将表达式的结果求出。此外,需要改进原程序不能接受空格输入的遗憾,并将每一步计算结果依次输出,使用户在操作时更加方便。
关键字 二叉树 后序遍历 构造 堆栈
0 引言
数据结构贯穿于计算机的应用,在学习了一定的数据结构知识后,只有将其应用于解决实际问题才能真正了解数据结构的作用。本程序设计通过对二叉树的一个简单应用,对C++程序语言、数据结构的应用以及算法的设计都有了初步的认识。
1程序功能简介
原程序是利用二叉树的结构解决带括号的四则运算的问题。程序中利用二叉树的堆栈将二叉树的结点变成其数据域是运算符,左右子树或是标准结点形式,或是另外的标准二叉树形式,这样,程序通过后序遍历,就可将标准结点中的表达式求出。
2课程设计要求(难易等级:A)
将程序的运算步骤完整地描述出来。
四则运算的表达式可以接受空格输入。
依照运算顺序依次输出四则运算的每一步的算式及结果,最后输出最终计算结果。
3源程序各个功能说明(对原程序进行修改后)
3.1源程序的结构概述及结构框图
3.1.1主程序结构及框图
对输入的表达式进行合法性判断,若非法则输出错误提示信息,若合法,则提取每一个字符进行操作。若为数字字符,将相邻的数字字符放到一起成为一个操作数整体,将其作为单结点二叉树压栈;若为运算符字符,则与运算符栈顶元素的优先级进行比较,从而执行相应的压栈操作或弹栈构造子二叉树的操作。如此循环至表达式扫描完毕,判断运算符栈是否为空,若为空则继续弹栈构造子二叉树,至运算符栈为空,此时后序遍历表达式二叉树,计算结果。
主程序的结构框图如下:
Y
N
N N N
Y Y Y
Y
N Y
Y
N
N
Y
N
N
Y
Y
N
Y
N
3.1.2 判断输入表达式是否合法(已整理为无空格)
N N
Y Y
N N
N
Y Y
Y
N Y
Y Y
N
N
N
Y
N
Y
3.1.3 构造二叉树
Y
N
3.1.4 相邻数字字符放到一起
N
Y
3.2表达式
一个表达式是由操作数(operand)、运算符(operator)及分隔符()所构成。一般我们所写的都是中序表示法(),如:X+Y;X+Y*Z。由于表达式中的运算符有优先级,故要用计算机运算中序表达式是很不方便的。所以要在计算机中有效率地计算表达式的值,我们希望能够将中序表达式先转换成较易求值的前序(prefix)或后序(postfix)表达式,再进而求算式之值。
前序、中序及后序表达式的差异主要在于运算符所在位置不同,前序表达式是将运算符写在两个操作数之前,如:+ X Y;+ X * Y Z。后序表达式当然就是将运算符写在两个操作数之后,如:X Y +;X Y Z * +。
本程序设计利用后序的思想,采用堆栈的处理方法,按运算符的优先级,层层构造表达式二叉树,至最终生成完整的表达式二叉树。在计算时,用二叉树的后序遍历完成类似于用两个堆栈(运算符栈和操作树栈)完成的计算。
3.3二叉树及其后序遍历
本程序主要利用二叉树来存储表达式中的运算符和操作数,利用二叉树特殊的结构和遍历程序完成对表达式的计算。在存储结构方面,采用二叉链表的形式,即一个二叉树中的结点包括数据域(data)、左指针域(left_child)、右指针域(right_child)。
在构造表达式二叉树时,标准结点形式为:若以某运算符为一子二叉树的根结点,则其左右操作数分别作为此根结点的左右子树。总是从优先级最高的运算符开始构造,再将每次构造好的子二叉树作为一个新的操作数,已备后面再次构造时使用。
而在构造表达式二叉树时是从优先级最高的运算符开始的,并作为二叉树结构中的最低一层。因此,采用了堆栈的数据结构来记忆优先级较低但在表达式中先被扫描到的运算符。当栈顶元素优先级高于后一个运算符时便开始构造子二叉树。如此循环,直至运算符栈为空。
因为每一次构造的子二叉树也许并不是最终的表达式二叉树,可能还要作为一个操作数参加后面的构造,所以,再保存这些操作数的时候也采用了堆栈的数据结构。由于操作数不一定只是数字字符串,也有可能是一个子表达式,而子表达式是以二叉树形式存储的,所以用于存放操作数的堆栈需定义成二叉树类型的。
程序中定义了二叉树类,类中包括了一些二叉树的成员数据和成员函数,用来二叉树对象进行各种允许的操作。
所谓二叉树的后序遍历,即先遍历左子树,再遍历右子树,最后才遍历根结点。可以采用递归或堆栈的方法实现,本程序采用递归程序完成后序遍历。
将表达式以
您可能关注的文档
- 经济作物测土配方施肥技术百问百答.pdf
- 精细化学品大全-农药卷.pdf
- 卡培他滨合成工艺研究.doc
- 锂电应用基础知识培训考试试题-涂礼斌.doc
- 锂电应用基础知识-涂礼斌.ppt
- 辣椒高产优质栽培.pdf
- 两串电池保护PCB'A统计表.pdf
- 利用Mg含量控制Zn_1_x_Mg_xO薄膜压敏电阻器的阈值电压.pdf
- 两串N并电池PACK组装方案.pdf
- 量測能力檢定(GR&R)介紹-8.ppt
- 南京理工大学《VC++程序设计》0804220101 陈雨润 扑克牌游戏.doc
- 南京理工大学《VC++程序设计》C++备课讲义第2章.ppt
- 南京理工大学《VC++程序设计》C++备课讲义第1章.ppt
- 南京理工大学《VC++程序设计》C++备课讲义第3章.ppt
- 南京理工大学《VC++程序设计》C++备课讲义第4章.ppt
- 南京理工大学《VC++程序设计》C++备课讲义第6章.ppt
- 南京理工大学《VC++程序设计》C++备课讲义第7章.ppt
- 南京理工大学《VC++程序设计》C++备课讲义第8章.ppt
- 南京理工大学《VC++程序设计》C++讲义第9章.ppt
- 南京理工大学《VC++程序设计》C++讲义第12章.ppt
原创力文档


文档评论(0)