一、中缀表达式转后缀表达式(机算)
初始化一个栈,用于保存暂时还不确定运算顺序的运算符。
从左到右处理各个元素,直到末尾。可能遇到三种情况:
①遇到操作数。直接加入后缀表达式。
②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。
注:“(”不加入后缀表达式。
③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“(”或栈空则停止。之后再把当前运算符入栈。
例:
图示
①
②
③
④
⑤
⑥
⑦
⑧
⑨
⑩
二、中缀表达式的计算(用栈实现)
用栈实现中缀表达式的计算:
初始化两个栈,操作数栈和运算符栈
若扫描到操作数,压入操作栈
若扫描到运算符或界限符,则按照“中缀转后缀”相同的逻辑压入运算符栈(期间也会弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作栈的栈顶元素并执行相应运算,运算结果再压回操作数栈)
例:
①
②
③
④
⑤
⑥
⑦
⑧
⑨
⑩