时日不多了,好好珍惜OI的时光。
### 逆波兰表达式
实质上就是中缀的后序遍历,把运算的优先给简化了,就是读到运算符的话就把栈顶的两个数出栈进行操作就好了,之后把结果再压进栈中。
比如3*(5–2)+7 就是 3 5 2 - * 7 +;4 + 2 * 5 - 7 / 11 就是 4 2 5 * + 7 -;
我们发现他的特性就是数字的顺序未变,变的只是符号的位置。而这种表达式的运算就是找到最近的运算符进行操作。所以说它是没有优先级的。
练习:luogu1449
那怎么转呢?
实际上还是利用栈。是数字的话就输出,是左括号的话就压进来,是右括号就弹出栈顶直到右括号。普通运算符就是如果栈顶优先级比当前大,那就输出,否则就压进去。最后栈中还有其他元素就弹出输出。
其实逆波兰表达式就是给表达式求值用的,计算器就是用的这个算法。
先把中缀转成逆波兰,再求值就ok了。快又稳。
练习:luogu 1981、1175;hdu 1237
原文:https://www.cnblogs.com/Simples2004/p/11423069.html