题目
原则
准备两个栈s、t。
从左向右扫描,遇到数字入栈s,遇到运算符c入栈t,运算符c与t栈顶的比较规则如下:
- 运算符c > t 栈顶(优先级),则入栈
- 运算符c <= t 栈顶(优先级),则t 出栈一个元素,s 出栈2个元素并计算后将计算后的值入栈s,直到t栈顶优先级大于c
- 运算符c 为( ,则入栈,遇到) 时出栈( ) 之间的所有运算符
解析
从左向右扫描:
s、t初始状态:
扫描:3
扫描:*
扫描:2
扫描:^
扫描:(
扫描:4
扫描:+
扫描:2
扫描:*
扫描:2
扫描:-
由于 - <= t栈顶 * (优先级),则t 出栈
t 出栈 *,s 出栈2、2,计算后入栈s
出栈:
2 * 2 = 4,将4入栈s:
由于 - <= t栈顶元素 + ,继续出栈
出栈:
4 + 4 = 8,将8入栈s:
由于 - > ( ,将 运算符c 入栈t :
扫描:6
(所以,题目的答案就选第四个)
扫描:*
扫描:3
扫描:)
将( ) 之类的所有元素出栈
t 出栈*,s出栈3、6
6 * 3 = 18,将18入栈s:
t 出栈-,s出栈18、8:
8 - 18 = -10,将-10入栈s:
t 出栈 (:
扫描:-
由于 - <= ^
t 出栈 ^ ,s 出栈-10、2:
2 ^ -10 = 1/1024,将1/1024入栈s:
由于 - <= t 栈顶 *
t 出栈 *,s出栈1/1024、3
3 * 1/1024 = 3/1024 ,将3/1024入栈s:
入栈 -:
扫描:5
最后,全部出栈计算:
3/1024 - 5 = -5117/1024,将-5117/1024入栈s:
如有错误,请指正。