• 中缀、前缀和后缀表达式


    我们学习的算法中的表达式有中缀、前缀和后缀之分,到底有什么区别呢?

    中缀(INFIX)

    中缀表达式(infix expression)可以是单个变量,或两个变量以及中间的操作符。

    A
    A + B
    (A + B) + (C – D)

    前缀(PREFIX)

    前缀表达式(prefix expression)可以是单个变量,一个操作符,后面跟两个操作数,每个前缀表达式包括一个操作符和两个操作数。

    A
    + A B
    + + A B – C D

    后缀(POSTFIX)

    后缀表达式(postfix expression),也叫反转的波兰记法(Reverse Polish Notation)可以是单个变量,或者是两个操作数外跟一个操作符,每个后缀表达式包括两个操作数后跟一个操作符。

    A
    A B +
    A B + C D –

    前缀和后缀记法是波兰数学家发明的手写数学表达方法,好处就是不需要括号。他们的时间复杂度都是O(n),n为数组元素个数。

    INFIX PREFIX POSTFIX
    A + B + A B A B +
    A + B – C – + A B C A B + C –
    (A + B) * C – D – * + A B C D A B + C * D –


    为了方便起见,其他一些操作符的优先级和结合性列表如下:

    TOKEN OPERATOR PRECEDENCE ASSOCIATIVITY
    ( )
    [ ]
    – .
    function call
    array element
    struct or union member
    17 left-to-right
    — ++ increment, decrement 16 left-to-right
    !
    ~
    – +
    & *
    sizeof
    logical NOT
    one’s complement
    unary minus or plus
    address or indirection
    size (in bytes)
    15 right-to-left
    (type) type cast 14 right-to-left
    * / % multiplicative 13 left-to-right
    + – binary add or subtract 12 left-to-right
    << >> shift 11 left-to-right
    > >=
    < <=
    relational 10 left-to-right
    == != equality 9 left-to-right
    & bitwise AND 8 left-to-right
    ^ bitwise XOR 7 left-to-right
    | bitwise OR 6 left-to-right
    && logical AND 5 left-to-right
    || logical OR 4 left-to-right
    ? : conditional 3 right-to-left
    = += /= *= %=
    &= ^=
    assignment 2 right-to-left
    , comma 1 left-to-right
  • 相关阅读:
    Google Go语言推出第一个正式版本:Go 1
    前端开发工作感悟:具体的量化指标
    AIR SDK 更新方法
    HTML5 MediaStream的运用
    理解css中的长度单位
    快速提高 Vi/Vim 使用效率的原则与途径
    Saving the Day with Scoped CSS
    事件的发生顺序HTML5移动开发
    BigPipe学习研究
    构建合规的Web应用程序
  • 原文地址:https://www.cnblogs.com/programnote/p/4715541.html
Copyright © 2020-2023  润新知