北京工业大学2016-2017学年第学期信息学部计算机学院课程名称:数据结构与算法报告性质:□作业报告√□实验报告学号:姓名:任课教师:苏航课程性质:学科基础必修课学分:3
5学时:56班级:成绩:小组成员:教师评语:2017年3月31日报告题目:输入中缀表达式,输出后缀表达式,并对表达式求值A.分析中缀表达式的运算顺序受运算符优先级和括号的影响
因此,将中缀表达式转换成等价的后缀表达式的关键在于如何恰当的去掉中缀表达式中的括号,然后在必要时按照先乘除后加减的优先规则调换运算符的先后次序
在去括号的过程中用栈来储存有关的元素
基本思路:从左至右顺序扫描中缀表达式,用栈来存放表达式中的操作数,开括号,以及在这个开括号后面的其他暂时不能确定计算次序的内容
(1)当输入的是操作数时,直接输出到后缀表达式(2)当遇到开括号时,将其入栈(3)当输入遇到闭括号时,先判断栈是否为空,若为空,则表示括号不匹配,应作为错误异常处理,清栈退出
若非空,则把栈中元素依次弹出,直到遇到第一个开括号为止,将弹出的元素输出到后缀表达式序列中
由于后缀表达式不需要括号,因此弹出的括号不放到输出序列中,若没有遇到开括号,说明括号不匹配,做异常处理,清栈退出
(4)当输入为运算符时(四则运算+-*/之一)时:a
循环,当(栈非空&&栈顶不是开括号&&栈顶运算符的优先级不低于输入的运算符的优先级)时,反复操作将栈顶元素弹出,放到后缀表达式中
将输入的运算符压入栈中
(5)最后,当中缀表达式的符号全部扫描完毕时,若栈内仍有元素,则将其全部依次弹出,放在后缀表达式序列的尾部
若在弹出的元素中遇到开括号,则说明括号不匹配,做异常处理,清栈退出
B.实现#include#include#include#includeusingnamespacestd;#defineN1000charinfix[N];//中缀表达