先入后出
1.栈的进出问题(题目一般只说入栈顺序,而没说啥时候出来)
2.逆波兰式(栈的后缀表示,从中缀转后缀)
例:
(a+b)*3 +2
运算符在两个操作数中间,为中缀表达式
因为电脑太笨,所以需要将中缀表达式转换成后缀表达式,利用栈进行计算。
算法:
如何将中缀表达式转换成后缀表达式?
1.按执行的先后顺序,给表达式全部加上括号
2.把所有运算符移到右括号的后面
3.把所有的括号删除
例: a/b^c+d*e-a*c
1.这个式子需要这样计算 (((a/(b^c))+(d*e) )-(a*c))
2.(((a(bc)^)/(de)* )+(ac)*)-
3. abc^/de*+ac*-
对于计算机:
1。读取表达式exp的一个单词x
2。若x是操作数,则原样输出。否则执行3:
3。x是运算符。若x是) 则将栈中元素输出 直到遇到(为止。将(从栈中删除,执行4
4。x不是),循环比较栈顶元素和x的优先级,若不小于,则栈顶元素出栈输出
5。x进栈
6。若表达式已读完,则执行1,否则执行7
7。将栈中元素依次输出,直至栈空。
例如:8-(3+5)*(5-6/2)