例:中缀表达式(2+2!)/√4+2^转为后缀表达式。
1.运算符“(”入栈。
栈顶———
(
栈底———
后缀表达式:空
2.“2”加入后缀表达式。
栈顶———
(
栈底———
后缀表达式:2
3.运算符“+”入栈。
栈顶———
+
(
栈底———
后缀表达式:2
4.“2”加入后缀表达式。
栈顶———
+
(
栈底———
后缀表达式:2'2
5.运算符“!”入栈,由于该运算符的优先级高于当前栈顶元素的优先级,所以直接入栈。
栈顶———
!
+
(
栈底———
后缀表达式:2'2
6.运算符“)”入栈,与栈内的一个“(”配对,所以依次将栈内元素从栈顶开始出栈,直到删除一个“(”为止,即将栈内元素全部出栈并加入后缀表达式。(括号不会加入后缀表达式)
栈顶———
空
栈底———
后缀表达式:2'2!+
7.运算符“/”入栈。
栈顶———
/
栈底———
后缀表达式:2'2!+
8.运算符“√”的优先级高于运算符“/”的优先级,所以直接入栈。
栈顶———
√
/
栈底———
后缀表达式:2'2!+
9.“4”加入后缀表达式。
栈顶———
√
/
栈底———
后缀表达式:2'2!+4
10.运算符“+”的优先级低于当前栈顶元素的优先级,即从当前的栈顶元素开始依次出栈,直到遇到一个比运算符“+”优先级更低的运算符或一个括号为止,因为没有比运算符“+”优先级更低的运算符,所以全部出栈并加入后缀表达式,最后将运算符“+”入栈。
栈顶———
+
栈底———
后缀表达式:2'2!+4√/
11.“2”加入后缀表达式。
栈顶———
+
栈底———
后缀表达式:2'2!+4√/2
12.运算符“^”的优先级高于运算符“+”,直接入栈。
栈顶———
^
+
栈底———
后缀表达式:2'2!+4√/2
13.扫描结束,栈内元素全部依次出栈并加入后缀表达式。
栈顶———
空
栈底———
后缀表达式:2'2!+4√/2^+
by百度贴吧
@至尊胖鱼