我们再来复习一下堆栈(Stack)这个数据结构,堆栈是有一定约束的线性表,插入和删除操作都作用在栈顶(Top)位置。
我们既可以通过数组顺序实现堆栈,也可以通过链表链式实现堆栈,具体情况具体分析。
那么什么是中缀表达式和后缀表达式呢?
通俗地来说,中缀表达式就是我们平常用到的表达式的方式,比如说:
1+2x(3-4)
而后缀表达式呢?则是计算机容易识别的,但是对于人来说有点难受:
1234-x+
这就是上面的表达式用后缀法来表达,这样的表示方法有什么好处呢?因为在中缀表达式中,我们从头往后读,如果读到了运算符号,没有办法立即进行运算,因为后面可能有更高的优先级的运算符号,所以简单地从左到右的计算时不可行的。但是在后缀表达式中,我们读到一个符号以后就可以马上和该符号之前的两个数一起做运算,不需要判别运算符的优先级,这就是后缀表达式的好处。
那么如何将中缀表达式转换为后缀表达式呢?我们就需要用到堆栈这个数据结构。
通过上面的例子可以看到,后缀表达式和中缀表达式的数字相对位置是不改变的,有变化的只有运算符的位置。
而运算符的输出则需要根据前后运算符的优先级来看,有可能在得到了后一个运算符的时候,才知道要输出前一个运算符,所以堆栈就很符合这个特点。
具体关键点是