1、操作数栈置空,将表达式起始符"#"作为运算符栈的栈底元素
2、依次读入每个字符,若是操作数则入操作数栈;若是运算符s1则和运算符栈顶元素s2比较优先级后进行相应的操作,直至整个表达式求完。
i)若优先级s1>s2,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)运算符 -,( -的优先级低于*)栈顶字符 * 出栈,完成2*2=4的运算,将结果4存入s1中;---s1:3,2,4,4;
( -的优先级低于+)栈顶字符+出栈,完成4+4=8的运算,将结果8存入s1中;---s1:3,2,8;
此时,- 成为了(后的运算符,则直接入栈s2;---s2:*^(-;
(12)操作数6 扫描;
1、操作数栈置空,将表达式起始符"#"作为运算符栈的栈底元素
2、依次读入每个字符,若是操作数则入操作数栈;若是运算符s1则和运算符栈顶元素s2比较优先级后进行相应的操作,直至整个表达式求完。
i)若优先级s1>s2,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)运算符 -,( -的优先级低于*)栈顶字符 * 出栈,完成2*2=4的运算,将结果4存入s1中;---s1:3,2,4,4;
( -的优先级低于+)栈顶字符+出栈,完成4+4=8的运算,将结果8存入s1中;---s1:3,2,8;
此时,- 成为了(后的运算符,则直接入栈s2;---s2:*^(-;
(12)操作数6 扫描;