本文共 867 字,大约阅读时间需要 2 分钟。
表达式3*2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和运算符栈为(),其中^为乘幂
A.3,2,4,1,1;(*^(+*-
B.3,2,8;(*^-
C.3,2,4,2,2;(*^(-
D.3,2,8;*^(-
对象栈:3,2,8;算符栈:*,^,(,- 。链接:
来源:牛客网一、准备两个栈:操作数栈s1,运算符栈s2。
二、从【左至右】扫描表达式:3*2^(4+2*2-6*3)-5;
遵循的原则是: 遇到操作数入s1栈;若遇到运算符c,则需要与s2的栈顶 字符c2进行优先级比较;
《1》若c > c2,则c入栈;
《2》若c < c2,则c2退栈,并将s1栈顶的两个元素退栈与操作符一起运算,将结果入s1栈;
(1)操作数3,入栈s1;
(2)运算符*,入栈s2;
(3)操作数2,入栈s1;
(4)运算符^ ,入栈s2;(理由是:^的优先级 高于 *的优先级)
(5)运算符(,直接入s2;
(6)操作数4,入栈s1;
(7)运算符+,入栈s2;(理由是:( 后面的运算符直接入栈)
(8)...数2,入栈s1;
(9)...符*,入栈s2;(理由是:*的优先级 高于 +的优先级)
(10)...数2,入栈s1;
(11)...符 -,(由于 -的优先级低于*)s2的栈顶字符 * 出栈,并完成2*2=4的运算,将结果4存入s1中;---s1:3,2,4,4;
(由于 -的优先级低于+)s2的栈顶字符+出栈,并完成4+4=8的运算,将结果8存入s1中;---s1:3,2,8;
此时,- 成为了(后的运算符,则直接入栈s2;---s2:*^(-;
(12)...数6;
具体过程:
第一次:对象栈:3;算符栈:*;
第二次:对象栈:3,2;算符栈:*,^,(;
第三次:对象栈:3,2,4;算符栈:*,^,(,+;
第四次:对象栈:3,2,4,2;算符栈:*,^,(,+,*;
第五次:对象栈:3,2,4,4;算符栈:*,^,(,+;
第六次(扫描到6):对象栈:3,2,8;算符栈:*,^,(,-
转载地址:http://hqypi.baihongyu.com/