栈的应用-(计算器/表达式的计算/后缀表示)

问题描述:标准输入读入一个整数算数表达式,计算结果并输出
要求:
1.表达式中只有+ ,-,,/,表达式末尾的=,表达式中可能出现空格
2.表达式中可能出现圆括号,括号可以嵌套,不会出现错误的表达式
3.出现除号/时,以整数相除进行运算,结果仍是整数。
输入形式:从键盘输入一个以=结尾的算术运算表达式
输出形式:在屏幕上输出计算表达结果,为整数。
样例1:24/(1+2+36/6/2-2)
(12/2/2)=
样例一输出
18

问题分析:
上文中是中缀表达式,在计算机中我们常常转化成后缀表达式
a+b
a+bc
a+b
c+(d*e+f)/g

转化成后缀表达式为:
ab+
abc*+
abc*+de*f+g/+

中缀到后缀的转换规则
从左到右遍历中缀表达式中每一个数字和符号:
如果是数字直接输出,即成为后缀表达式的一部分:
若是符号:
若是(,则将栈中元素弹出并输出,直到遇到(,(弹出但是不输出
若是(,+,*等符号,则从栈中弹出并输出优先级高于(或等于)当前的符号,直到遇到一个优先级低的符号;然后将当前符号压入栈中。
遍历结束,将栈中的所有元素依次弹出,直到栈为空。

后缀表达式的计算:
从左到右遍历后缀表达式中每个数字和符号:
如果是数字直接进栈;
若是运算符±*/,则从栈中弹出两个数字进行运算,并将计算结果进栈。
遍历结束,将计算结果从栈中弹出(栈中应该只有一个数字,否则表达式有错)。

思路:设两个栈,一个数据栈,用来转化,一个计算栈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值