• 前缀、中缀、后缀表达式的转换(栈)


    前缀表达式:op a b   

    中缀表达式:a op b

    后缀表达式 a b op

    1、对于计算单独的后缀表达式较为简单,从左到右,遇到数字将其压入栈内,遇到操作符从栈中取出两个数进行相应操作,结果再次压入栈内。

    2、对于前缀表达式的计算和后缀相似,从右到左的顺序,剩下和后缀一致

    3、对于中缀表达式,我们可以选择将其转换成前缀或者后缀表达式。

    中缀转后缀:(从左到右)

    1、遇到一个数字就输出 (毕竟不管中缀和后缀,都只是操作符位置的改变,和数字无关)

    2、遇到‘(  ’直接压入栈

    3、遇到’  )‘将栈中操作符输出,直到输出’(  ‘  (括号内相当于另一个后缀表达式,当遇到’)‘时,就将括号内的符号都输出)

    4、遇到操作符,将栈中优先级不低于的符号输出,然后将操作符压入栈 (乘除 > 加减 > 左括号)(因为优先级高的需要先运算,优先级相同的因为先出现所以先运算)

    5、最后输出栈中剩下的所有操作符

    中缀转前缀:(从右到左)

    1、遇到一个数字就输出到临时栈 (毕竟不管中缀和前缀,都只是操作符位置的改变)

    2、遇到‘ )  ’直接压入符号栈

    3、遇到’  (‘将符号栈中操作符输出,直到输出’)  ‘

    4、遇到操作符,将栈中优先级大于的符号输出,然后将操作符压入符号栈 (乘除 > 加减 > 右括号)

    (优先级相同之所以不出栈,因为输出的前缀时倒序的,优先级相同应该在更后面输出,这样倒过来才是最前面)

    5、最后输出符号栈中剩下的所有操作符至临时栈

    6、然后输出临时栈中的结果(输出出来的才是前缀表达式)

  • 相关阅读:
    [HNOI2013]切糕
    [POI2015]Kinoman
    「NOI2014」动物园
    [ZJOI2006]书架
    [HEOI2015]定价
    bzoj1833 数字计数
    bzoj2565 最长双回文子串
    bzoj4198 荷马史诗
    bzoj1193 马步距离
    bzoj3329 Xorequ
  • 原文地址:https://www.cnblogs.com/iwannabe/p/10631636.html
Copyright © 2020-2023  润新知