一阵风

宠辱不惊 闲看庭前花开花落 去留无意 漫随天上云卷云舒

有关中缀表达式转换成后缀表达式的算法

 中缀表达式是一般进行数学运算时用的式子,如: 4+2*3-2+6*5*(2-1)

后缀表达式主要是方便计算机对一个数学式子求值而衍生出来的,如上面那个式子的后缀表达式为:

4 2 3 * + 2 - 6 5 * 2 1 - *

闲话不说,转换算法如下:

str1 放中缀表达式,并在后面加一个'#'

str2 放后缀表达式, 当然先将其置空,另开一个栈放符号,并预先在符号栈存一优级极低的'#'

优先级按四则运算顺序, () >  * /  > +  -  > #; * = /    ; + = -

1, 从左到右读取str1;

2, 如果是操作数,则直接放进str2里;

3,如果是操作符, 则与栈顶的操作符相比较, 当然,这包括'#', 如果新读取的操作符比栈顶操作符的优先级高, 则直接将操作符进栈,如果新读取的操作符与栈顶操作符的优先级相等或者小于栈顶操作符的优先级, 则pop()出栈顶操作符,将其放进str2中, 再将新读取的操作符与新的栈顶操作符比较;

4,如果是'(', 直接进栈;

5, 如果是')',则依次弹出栈里面的操作符,直到遇到一个'('为止;

6,如果是'#',则说明已将中缀表达式读取完了, 所以直接将栈内操作符弹出放至str2中,包括栈中的'#'.

 

实现代码过两天会给出.

阅读更多
文章标签: 算法
个人分类: 算法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭