第 1 题
数据结构若栈S₁中保存整数,栈S₂中保存运算符,函数F()依次执行下述各步操作:
(1)从S₁中依次弹出两个操作数a和b;
(2)从S₂中弹出一个运算符op;
(3)执行相应的运算b op a;
(4)将运算结果压入S₁中。
假定S₁中的操作数依次是5,8,3,2(2在栈顶),S₂中的运算符依次是*, -, +(+在栈顶)。
调用3次F()后,S₁栈顶保存的值是( )。
A. -15
B. 15
C. -20
D. 20
查看答案与解析
参考答案:B
答案:B。
**思路:**栈遵循后进先出,S₁ 的栈顶是 2,S₂ 的栈顶是 +。每次先弹出的数记为 a,后弹出的记为 b,而实际运算必须是 b op a。加法、乘法交换次序不影响结果,减法却不能颠倒。
第一次弹出 a=2、b=3 和 +,算 ,S₁ 从栈底到顶变为 [5,8,5]。第二次弹出 a=5、b=8 和 −,算 ,栈变为 [5,3]。第三次弹出 a=3、b=5 和 ×,算 ,栈只剩 [15],因此选 B。A 的 −15 常见于把第二次减法算成 5−8;C、D 的 ±20 都不符合这三次弹出、运算、压回的状态变化。不能把原数列直接按通常算术表达式优先级计算。






