栈在表达式中求值的应用(中缀表达式的结算机算——用栈实现)

文章目录

  • 中缀表达式 转 后缀表达式(机算,用栈实现)
  • 中缀表达式的机算(用栈实现)

中缀表达式 转 后缀表达式(机算,用栈实现)

初始化一个栈,用于保存暂时还不能确定运算顺序的运算符
从左到右处理各个元素,直到末尾。可能遇到三张情况:
①遇到操作数。直接加入后缀表达式。
②遇到界限符遇到“( ”直接入栈;遇到“ )”则依次弹出栈内运算符并加入后缀表达式,直到弹出(一个)“( ”为止(可以理解成相互抵消)。注意:“( ”不加入后缀表达式
③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到“( ”或栈空则停止。之后再把当前运算符入栈。* / 优先级高于 + -
按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。

中缀表达式的机算(用栈实现)

中缀转后缀 + 后缀表达式求值两个算法的结合
用栈实现中缀表达式的计算:
初始化两个栈:操作数栈运算符栈
若扫描到操作数,则压入操作数栈;
若扫描到运算符或界限符,则按照“中缀转后缀”相同的逻辑压入运算符栈(期间也会弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素并执行相应的运算,运算结果 再压回操作数栈

  • 中缀转后缀:即上面讲的 机算,用栈实现的(用于存放当前暂时还不能确定运算次序的运算符
  • 后缀表达式的求值(计算)先出栈的是 “右操作数”,用栈实现(用于存放当前暂时还不能确定运算次序的操作数