数据结构——栈:栈的应用:表达式求值

前缀表达式的计算机求值

从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素 op 次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果

例如:- × + 3 4 5 6

1. 从右至左扫描,将6、5、4、3压入堆栈

2. 遇到+运算符,因此弹出3和4(3为栈顶元素,4为次顶元素,注意与后缀表达式做比较),计算出3+4的值,得7,再将7入栈

3. 接下来是×运算符,因此弹出7和5,计算出7×5=35,将35入栈

4. 最后是-运算符,计算出35-6的值,即29,由此得出最终结果

中缀表达式计算机求值

只需要记住一点:只有当前操作符的优先级高于操作符栈栈顶的操作符的优先级,才入栈,否则弹出操作符以及操作数进行计算直至栈顶操作符的优先级低于当前操作符,然后将当前操作符压栈。当所有的操作符处理完毕(即操作符栈为空时),操作数栈中剩下的唯一一个元素便是最终的表达式的值。

后缀表达式计算机求值

与前缀表达式类似,只是顺序是从左至右:从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素 op 栈顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果

例如后缀表达式“3 4 + 5 × 6 -”:

1从左至右扫描,将3和4压入堆栈;

2遇到+运算符,因此弹出4和3(4为栈顶元素,3为次顶元素,注意与前缀表达式做比较),计算出3+4的值,得7,再将7入栈;

35入栈;

4.接下来是×运算符,因此弹出5和7,计算出7×5=35,将35入栈;

5.6入栈;

6.最后是-运算符,计算出35-6的值,即29,由此得出最终结果。

利用栈求表达式的值时,设立操作数栈OPND,设OPND只有两个存储单元,在下列表达式中,不发生上溢的是()

1)A-B*(C-D)

2)(A-B)*C-D

3)(A-B*C)-D

4)(A-B)*(C-D)

答案:B

 

猜你喜欢

转载自blog.csdn.net/sunshare77/article/details/80666713