zoukankan      html  css  js  c++  java
  • 前后缀表达式

    前缀、中缀、后缀表达式

    前缀、中缀、后缀表达式是对表达式的不同记法,其区别在于运算符相对于操作数的位置不同,前缀表达式的运算符位于操作数之前,中缀和后缀同理

    举例:
    中缀表达式:1 + (2 + 3) × 4 - 5
    前缀表达式:- + 1 × + 2 3 4 5
    后缀表达式:1 2 3 + 4 × + 5 -


    ## 中缀表达式 中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式是人们常用的算术表示方法。 虽然人的大脑很容易理解与分析中缀表达式,但对计算机来说中缀表达式却是很复杂的,因此计算表达式的值时,通常需要先将中缀表达式转换为前缀或后缀表达式,然后再进行求值。对计算机来说,计算前缀或后缀表达式的值非常简单
    ## 前缀表达式

    前缀表达式的运算符位于两个相应操作数之前,前缀表达式又被称为前缀记法或波兰式

    前缀表达式的计算机求值

    1. 从右至左扫描表达式
    2. 遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素 op 次顶元素),并将结果入栈
    3. 重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果

    示例:
    计算前缀表达式的值:- + 1 × + 2 3 4 5

    1. 从右至左扫描,将5,4,3,2压入堆栈;
      2)遇到+运算符,弹出2和3(2为栈顶元素,3为次顶元素),计算2+3的值,得到5,将5压入栈;
      3)遇到×运算符,弹出5和4,计算5×4的值,得到20,将20压入栈;
      4)遇到1,将1压入栈;
      5)遇到+运算符,弹出1和20,计算1+20的值,得到21,将21压入栈;
      6)遇到-运算符,弹出21和5,计算21-5的值,得到16为最终结果

    可以看到,用计算机计算前缀表达式是非常容易的,不像计算后缀表达式需要使用正则匹配


    ## 后缀表达式

    后缀表达式与前缀表达式类似,只是运算符位于两个相应操作数之后,后缀表达式也被称为后缀记法或逆波兰式

    后缀表达式的计算机求值

    与前缀表达式类似,只是顺序是从左至右:

    1. 从左至右扫描表达式
    2. 遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素op 栈顶元素 ),并将结果入栈
    3. 重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果

    示例:
    计算
    计算后缀表达式的值:1 2 3 + 4 × + 5 -

    1)从左至右扫描,将1,2,3压入栈;
    2)遇到+运算符,3和2弹出,计算2+3的值,得到5,将5压入栈;
    3)遇到4,将4压入栈
    4)遇到×运算符,弹出4和5,计算5×4的值,得到20,将20压入栈;
    5)遇到+运算符,弹出20和1,计算1+20的值,得到21,将21压入栈;
    6)遇到5,将5压入栈;
    7)遇到-运算符,弹出5和21,计算21-5的值,得到16为最终结果


    ## 中缀表达式转化为前缀和后缀表达式

    转化步骤:

    1. 按照运算符的优先级对所有的运算单位加括号
    2. 将运算符移动到对应括号的前面(前缀表达式)或后面(后缀表达式)
    3. 去掉括号,得到前缀或后缀表达式

    示例:

    中缀表达式:1+(2+3)×4-5

    1)加括号
    式子变成 ((1+((2+3)×4))-5)

    2)移动运算符

    对于前缀表达式,变成了 -(+(1×(+(23)4))5)

    对于后缀表达式:变成了((1((23)+4)×)+5)-

    3)去掉括号
    前缀表达式: - + 1 × + 2 3 4 5
    后缀表达式:1 2 3 + 4 × + 5 -


    ## 小结 - 前缀、中缀、后缀是根据运算符与操作数的相对位置来划分的 - 中缀表达式符合人的计算习惯,而前缀和后缀表达式适合计算机计算 - 前缀表达式和后缀表达式计算的时候都是从一个方向扫描表达式,遇到数字压入栈,遇到运算符弹出栈顶的两个数进行运算并将结果入栈,重复知道结束 - 前缀和后缀表达式已经内在地包含运算顺序,因此不用括号来确定优先级

    文章来源链接:https://www.cnblogs.com/zzliu/p/10801113.html

  • 相关阅读:
    mysql命令集锦
    linux 删除文件名带括号的文件
    linux下的cron定时任务
    struts2文件下载的实现
    贴一贴自己写的文件监控代码python
    Service Unavailable on IIS6 Win2003 x64
    'style.cssText' is null or not an object
    "the current fsmo could not be contacted" when change rid role
    远程激活程序
    新浪图片病毒
  • 原文地址:https://www.cnblogs.com/wxsheng/p/13662275.html
Copyright © 2011-2022 走看看