后缀表达式又称为逆波兰表达式
假定给出以下中缀表达式
1+3+2*2-1;
要将该表达式转为后缀表达式,我们要按照一定的规则去走,并且用到栈。
先来看规则中缀转后缀的规则:
前提:我们将上述表达式中的数字称为操作数,运算符号称为操作符。
先不考虑有括号的情况:
根据上述规则,对表达式转化的过程如下:
我们再来看中缀表达式里有括号的情况:
1+2+(6-2)*2;
总结:遇到左括号时,左括号入栈,在遇到右括号之前遇到的操作符都依次入栈,遇到右括号的时候,依次再出栈顶元素直到出到左括号,但是括号不作为输出进行输出。
我们就以上面第二组的测试为例,得到其后缀表达式的结果为:1 2 + 6 2 - 2 * +
将后缀表达式看作在一个栈中。
规则:
过程如下图:
逻辑其实还是并不是那么难的,但是要用代码写出来的话,还是有一定难度的,这里不建议使用C语言去写。
下面是两道力扣上的练习题目:
150.逆波兰表达式求值(中等)
224.基本计算器(困难)