题4

题目

利用栈求表达式的值时, 设立运算数栈 OPEN
假设 OPEN 只有两个存储单元, 则在下列表达式中, 不会发生溢出的是 ( )。
A. A - B * (C - D)
B. (A - B) * C - D
C. (A - B * C) - D
D. (A - B) * (C - D)

分析

也就是我们存放栈的中转区域,同时只能放2个

B
利用栈求表达式的值时,可以分别设立运算符栈和运算数栈,其原理不变。选项 B 中 A 入栈, B 入栈, 计算得 R1, C 入栈, 计算得 R2, D 入栈, 计算得 R3, 由此得栈深为 2。A、C、D 依次计算得栈深为 433 。因此选 B。
技巧: 根据算符优先级,统计已依次进栈,但还没有参与计算的运算符的个数。以选项 C 为例,当 ( A _ 入栈时, (_ 还没有参与运算, 此时运算符栈大小为 2 , B* 入栈时运算符大小为 3 , C 入栈时 B*C 运算, 此时运算符栈大小为 2 , 以此类推。