中缀表达式的计算(只包含四则运算与括号)

本文介绍了如何处理中缀表达式,将其转换为后缀表达式,并计算后缀表达式的结果。通过栈来处理运算符的优先级,遇到括号时特殊处理。转换过程中,遇到数字直接保存,遇到运算符根据优先级规则决定是否压栈。计算后缀表达式时,使用栈保存结果,依次进行运算。
摘要由CSDN通过智能技术生成

        在上周的ACM入门课上,老师为了计算中缀表达式而引入了后缀表达式的概念,并布置作业:输入一个中缀表达式,输出其后缀表达式。

        如输入:5+2*(3+4)*5-3      输出:5 2 3 4 + * 5 * + 3 -

        我在解决了这个问题后,忽然就想到不如就顺便解决最终问题。

        分析:输入的是中缀表达式,要输出其运算结果,需要考虑到各种运算优先级问题,所以应先应用上面的结果,把中缀表达式转化为后缀表达式,再计算后缀表达式。

        步骤:1.转化:我首先想的是没有括号的情况,因为括号不是运算符,只是改变运算优先级的。鉴于这里要把得到的后缀表达式保存下来,所以用一个数组stored保存,遇到数字就直接保存。关键是遇到运算符的情况。因为非常有可能后面的比前面的更优先运算,满足后进先出特点,用栈stack保存运算符。若当前运算符和栈顶运算符优先级相同,则可以看做栈顶的运算符先做;若当前的运算符比栈顶的运算符优先级低,则栈内的运算应全部做完,再轮到当前的运算符;其他情况则不操作。上述三种情况处理后都要将当前运算符压入栈。

                                    很明显,运算符只有两种优先级,那么不难得到栈内元素最多就是两个。因为若优先级相同,则输出前一个,压入当前,即不改变栈的元素个数,而优先级较大,则直接压入栈,但不可能连续出现较大的情况,所以最多只可能多一个即两个。而较小就清空了。

                                    这样

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值