中缀表达式是一般进行数学运算时用的式子,如: 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中,包括栈中的'#'.
实现代码过两天会给出.