码迷,mamicode.com
首页 > 其他好文 > 详细

中缀、前缀和后缀表达式

时间:2015-08-09 18:30:13      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

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

中缀(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

中缀、前缀和后缀表达式

标签:

原文地址:http://www.cnblogs.com/programnote/p/4715541.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!