前缀,中缀,后缀表达式

前缀表达式求值

  • 从右往左,遇到数字压入栈,遇到运算符出栈

中缀转前缀

  1. 初始化两个栈:运算符栈s1 , 储存中间结果的栈s2
  2. 从右往左扫描
  3. 遇到操作数压入s2
  4. 遇到运算符,与s1栈顶运算符比较优先级
    • 如果s1为空,或栈顶运算符为 ")" ,入栈
    • 优先级比栈顶运算符高或者相等,入栈s1
    • 否则,s1栈顶运算符弹出并压入s2
  5. 遇到括号时
    • ")",入栈s1
    • "(",依次弹出s1栈顶的运算符,压入s2,直到遇到")",丢弃括号
  6. 重复,将s1剩余的运算符依次弹出并压入s2
  7. 依次弹出s2中的元素并输出

后缀表达式求值

  • 从左往右,遇到数字压入栈,遇到运算符出栈

中缀转后缀

  1. 初始化两个栈:运算符栈1,储存中间结果的栈s2
  2. 从左往右扫描中缀表达式s
  3. 遇到操作数压入s2
  4. 遇到运算符时,比较其与s1栈顶运算符的优先级
    • 如果s1为空,或栈顶运算符为“(”,入栈
      • 优先级比栈顶运算符高(没有相等),入栈s1
      • 否则,s1栈顶运算符弹出并压入s2
  5. 遇到括号时
    • "(",入栈
    • ")",依次弹出s1栈顶的运算符,压入s2,直到遇到")",丢弃括号
  6. 重复,将s1剩余的运算符依次弹出并压入s2
  7. 依次弹出s2中的元素并输出
posted @ 2022-09-08 17:43  你在学什么  阅读(140)  评论(0)    收藏  举报