有关中缀表达式转换成后缀表达式的算法
2007-10-12 09:29
351 查看
中缀表达式是一般进行数学运算时用的式子,如: 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中,包括栈中的'#'.
实现代码过两天会给出.
后缀表达式主要是方便计算机对一个数学式子求值而衍生出来的,如上面那个式子的后缀表达式为:
4 2 3 * + 2 - 6 5 * 2 1 - *
闲话不说,转换算法如下:
str1 放中缀表达式,并在后面加一个'#'
str2 放后缀表达式, 当然先将其置空,另开一个栈放符号,并预先在符号栈存一优级极低的'#'
优先级按四则运算顺序, () > * / > + - > #; * = / ; + = -
1, 从左到右读取str1;
2, 如果是操作数,则直接放进str2里;
3,如果是操作符, 则与栈顶的操作符相比较, 当然,这包括'#', 如果新读取的操作符比栈顶操作符的优先级高, 则直接将操作符进栈,如果新读取的操作符与栈顶操作符的优先级相等或者小于栈顶操作符的优先级, 则pop()出栈顶操作符,将其放进str2中, 再将新读取的操作符与新的栈顶操作符比较;
4,如果是'(', 直接进栈;
5, 如果是')',则依次弹出栈里面的操作符,直到遇到一个'('为止;
6,如果是'#',则说明已将中缀表达式读取完了, 所以直接将栈内操作符弹出放至str2中,包括栈中的'#'.
实现代码过两天会给出.
相关文章推荐
- 中缀表达式转换为后缀表达式的算法
- 有关中缀表达式到后缀表达式的程序算法
- 栈和队列6|中缀表达式转换为后缀表达式 – 数据结构和算法28
- [Java算法分析与设计]利用栈操作中缀表达式和后缀表达式的转换和运算
- 中缀表达式转换为后缀表达式的算法
- 实现中缀表达式到后缀表达式的转换
- 中缀表达式转换成后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式到后缀表达式的转换
- Java数据结构06----中缀表达式转换为后缀表达式
- 表达式求值,中缀后缀转换,表达式递归直接求值等相关算法的实现
- 利用STL栈将中缀表达式转换成后缀表达式输出
- 数据结构 c语言设计堆栈 并将中缀表达式转换成后缀表达式
- 中缀表达式转换为后缀表达式的算法
- 中缀表达式转后缀表达式算法及实现
- 中缀表达式转换为前缀及后缀表达式并求值【摘】
- 中缀表达式转换成前缀表达式和后缀表达式的极其简单方法
- 中缀表达式转换为后缀表达式--堆栈实现
- 中缀表达式转换成前缀表达式和后缀表达式的极其简单方法
- 中缀表达式转换为后缀表达式及逆波兰式计算