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

 中缀表达式是一般进行数学运算时用的式子,如: 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中,包括栈中的'#'.

 

实现代码过两天会给出.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值