中缀、前缀和后缀表达式

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

中缀(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
posted @ 2015-08-09 17:55  programnote  阅读(2096)  评论(0编辑  收藏  举报