1. 中缀表达式转后缀表达式
① 两条基本规则: (1)数字无条件输出
(2)符号进栈进行相应处理
② 符号处理规则:
(简单点记忆就是,只有最强的才能站在高峰,不够强的,原先的大佬们就要跑路了,携款潜逃,等大佬都跑光了,才能压制住手下一帮小弟)
(1)当前符号的优先级 大于 栈顶符号的优先级时, 当前符号压栈
例:当前符号 * ,栈顶符号 + ,压栈
*(栈顶) |
+(原栈顶) |
(2)当前符号的优先级 小于等于 栈顶符号的优先级时,先将栈中元素弹出,直到当前栈顶的优先级 小于 待处理的符号的优先级。输入待处理符号为 -
优先级关系: * == / > + == -
原来的栈 | h后来的栈 |
* | |
+ | - |
③ 括号处理
(1) 左括号 ( 无条件压栈;
(2)右括号 ) 从栈顶开始向下逐个匹配左括号,匹配到了就将这一对括号之间的所有符号依次出栈。
④ 其他的补充:
2. 后缀表达式的计算
上述的处理将后缀表达式存储在一个数组当中。
规则:从左到右地扫描,
(1)操作数(数字)无条件压栈
(2)遇到操作码(符号)则从栈里弹出两个数字(先弹出的是第二操作数,后弹出的是第一操作数)
因为除法会产生小数,最好用浮点数的形式存储操作数。
(代码还没撸出来,等一下再贴吧( ̄︶ ̄)↗ )