栈的经典使用
逆波兰表达式法
标准四则运算表达式—中缀表达式 例:9 + ( 3 - 1) * 3 + 10 / 2
计算机采用—后缀表达式 例:9 3 1 - 3 * + 10 / 2 +
中缀表达式转后缀表达式 9 + ( 3 - 1) * 3 + 10 / 2 --> 9 3 1 - 3 * + 10 / 2 +
数字输出,运算符进栈,括号匹配出栈,运算符相遇输出优先级高的(先输出运算符后的数字)数字输出,运算符进栈 9 + ( 3 - 1) * 3 + 10 / 2 --> ( 3 - 1) * 3 + 10 / 2 输出:9
运算符进栈 ( 3 - 1) * 3 + 10 / 2 --> ) * 3 + 10 / 2 输出:9 3 1
括号匹配出栈: ) * 3 + 10 / 2 --> * 3 + 10 / 2 “ * ”进栈,先输出“ * ”后面的3: * 3 + 10 / 2 --> + 10 / 2
输出:9 3 1 - 3
运算符相遇输出优先级高的 栈顶“+”优先级比“ * ”优先级低,“ * ”出栈," + "进栈然后出栈,10出栈,“ / ”进栈输出2 :
+ 10 / 2 --> 输出完 输出:9 3 1 - 3 * + 10 2
栈顶“+”优先级比“ / ”优先级低,“ / ”出栈,最后" + "出栈 输出:9 3 1 - 3 * + 10 2 /
后缀表达式计算:
计算方法:9 3 1 - 3 * + 10 2 / + ,表达式从左至右挨个进栈 9 3 1,遇到符号弹出最进两个计算,栈底的放后面,如3 - 1 ,将计算结果2进栈,9 2 3 遇到符号2 3 出栈计算结果进栈,9 6 。。。
9 3 1 - 3 * + 10 2 / +
9 2 3 * + 10 2 / +
9 6 + 10 2 / +
15 10 2 / +
15 5 +
20