数据结构——实验报告HUNANUNIVERSITY课程实习报告题目:四则运算表达式求值学生姓名:周华毅学生学号:201308010411专业班级:计科1304指导老师:吴帆完成日期:2015/5/11/11数据结构——实验报告一、需求分析a)四则运算表达式求值,将四则运算表达式用中缀表达式表示,然后转换为后缀表达式,并计算结果
b)本程序要求利用二叉树后序遍历来实现表达式的转换,同时可以使用实验2的结果来求解后缀表达式的值
c)在字符界面上输入一个中缀表达式,回车表示结束
如果该中缀表达式正确,那么在字符界面上输出其后缀表达式,其中后缀表达式中两相邻操作数之间利用空格隔开;如果不正确,在字符界面上输出表达式错误提示
d)测试数据输入:21+23*(12-6)输出:2123126-*+二、概要设计抽象数据类型为实现上述程序的功能,应以字符串存储用户的输入,以及计算出的结果
算法的基本思想根据题目要求,利用二叉树后序遍历来实现表达式的转换
该算法的基本模块包括二叉树的建立以及如何把输入的中缀表达式利用二叉树后序遍历转化为后缀表达式
1、首先要将输入的中缀表达式(数字字符)存入到二叉树中,由于存在两位或者两位以上的数,甚至还有小数,所以考虑用字符型指针存储数字字符和操作符
2、为了便于将中缀表达式存入二叉树中,在录入中缀表达式后,要进行相应的处理,比如去掉空格符,添加结束标志,如‘=’、‘#’等
3、中缀表达式存入到二叉树的过程中,要注意处理的顺序,如‘+’、‘-’号的优先级比‘*’、‘/’号的低,当遇到‘*’、‘/’号时,要判断树以上的节点中是否有‘+’、‘-’号,有的话要与其交换位置
遇到‘(’时要反复创建二叉树的结点,构建子二叉树,考虑到括号内要处理的步骤可能会较多,可以考虑用递归
遇到‘)’时则直接结束此子二叉树的建立
此外二叉树中叶子结点存储操作数,非叶子结点存储操作码