中缀表达式转后缀表达式
2016-09-12 22:18
204 查看
1.遇到操作数:直接将其输出
2.当栈为空时,遇到运算符(* / + -),直接入栈
3.遇到其他运算符(* / + -),弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈
4.遇到左括号:将其入栈
5.遇到右括号:执行出栈操作,将栈中的元素逐个输出,直到遇到左括号,同时将左右括号抛弃
6.最终将栈中的操作符依次出栈,输出。
例如:
100 + ( 200 - 50 * 3 ) / ( 13 - 8 )
转换过程如下:
1.100 + ( 200 - 50 * 3 ) / ( 13 - 8 )
遇到操作数 100 直接输出
![](https://img-blog.csdn.net/20160912170307767)
2.+ ( 200 - 50 * 3 ) / ( 13 - 8 )
入到运算符 “+” ,因为栈为空,因此不需要比较直接放入栈中
![](https://img-blog.csdn.net/20160912170325241)
3.( 200 - 50 * 3 ) / ( 13 - 8 )
遇到”(”, 直接放到栈中
![](https://img-blog.csdn.net/20160912170337226)
4. 200 - 50 * 3 ) / ( 13 - 8 )
遇到操作数 200 直接输出
![](https://img-blog.csdn.net/20160912170428524)
5.- 50 * 3 ) / ( 13 - 8 )
遇到运算符”-”,和栈顶元素比较,因栈顶元素为 “(”,故直接放入栈中
![](https://img-blog.csdn.net/20160912170436595)
6.50 * 3 ) / ( 13 - 8 )
遇到操作数 50 直接输出
![](https://img-blog.csdn.net/20160912170446712)
7.* 3 ) / ( 13 - 8 )
遇到运算符”” 和栈顶的运算符”-”进行优先级的比较,””的优先级大于 ”-”,故直接放到栈中
![](https://img-blog.csdn.net/20160912170455696)
8.3 ) / ( 13 - 8 )
遇到操作数 3 直接输出
![](https://img-blog.csdn.net/20160912170504064)
9 ) / ( 13 - 8 )
遇到”)”,逐个输出栈中的元素,直到遇到”(”
![](https://img-blog.csdn.net/20160912170510712)
10./ ( 13 - 8 )
遇到运算符”/” 和栈顶的运算符”+”进行优先级的比较,”/”的优先级大于 ”+”,故直接放到栈中
![](https://img-blog.csdn.net/20160912170517580)
11.( 13 - 8 )
遇到”(”, 直接放到栈中
![](https://img-blog.csdn.net/20160912170525260)
12.13 - 8 )
遇到操作数 13 直接输出
![](https://img-blog.csdn.net/20160912170534385)
13.- 8 )
遇到运算符”-”,和栈顶元素比较,因栈顶元素为 “(”,故直接放入栈中
![](https://img-blog.csdn.net/20160912170543549)
14.8 )
遇到操作数 8 直接输出
![](https://img-blog.csdn.net/20160912170551674)
15.)
遇到”)”,逐个输出栈中的元素,直到遇到”(”
![](https://img-blog.csdn.net/20160912170600346)
16.然后逐个输出栈中的运算符
得到的最终结果便是中缀表达式转后缀表达式的结果
100 200 50 3 * - 13 8 - / +
2.当栈为空时,遇到运算符(* / + -),直接入栈
3.遇到其他运算符(* / + -),弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈
4.遇到左括号:将其入栈
5.遇到右括号:执行出栈操作,将栈中的元素逐个输出,直到遇到左括号,同时将左右括号抛弃
6.最终将栈中的操作符依次出栈,输出。
例如:
100 + ( 200 - 50 * 3 ) / ( 13 - 8 )
转换过程如下:
1.100 + ( 200 - 50 * 3 ) / ( 13 - 8 )
遇到操作数 100 直接输出
2.+ ( 200 - 50 * 3 ) / ( 13 - 8 )
入到运算符 “+” ,因为栈为空,因此不需要比较直接放入栈中
3.( 200 - 50 * 3 ) / ( 13 - 8 )
遇到”(”, 直接放到栈中
4. 200 - 50 * 3 ) / ( 13 - 8 )
遇到操作数 200 直接输出
5.- 50 * 3 ) / ( 13 - 8 )
遇到运算符”-”,和栈顶元素比较,因栈顶元素为 “(”,故直接放入栈中
6.50 * 3 ) / ( 13 - 8 )
遇到操作数 50 直接输出
7.* 3 ) / ( 13 - 8 )
遇到运算符”” 和栈顶的运算符”-”进行优先级的比较,””的优先级大于 ”-”,故直接放到栈中
8.3 ) / ( 13 - 8 )
遇到操作数 3 直接输出
9 ) / ( 13 - 8 )
遇到”)”,逐个输出栈中的元素,直到遇到”(”
10./ ( 13 - 8 )
遇到运算符”/” 和栈顶的运算符”+”进行优先级的比较,”/”的优先级大于 ”+”,故直接放到栈中
11.( 13 - 8 )
遇到”(”, 直接放到栈中
12.13 - 8 )
遇到操作数 13 直接输出
13.- 8 )
遇到运算符”-”,和栈顶元素比较,因栈顶元素为 “(”,故直接放入栈中
14.8 )
遇到操作数 8 直接输出
15.)
遇到”)”,逐个输出栈中的元素,直到遇到”(”
16.然后逐个输出栈中的运算符
得到的最终结果便是中缀表达式转后缀表达式的结果
100 200 50 3 * - 13 8 - / +
相关文章推荐
- 后缀表达式与中缀表达式互转的理论知识【转】
- 中缀表达式转为后缀表达式
- 中缀表达式转后缀表达式--C# 代码实现
- 中缀表达式转换成后缀表达式
- 中缀表达式转后缀表达式 求值
- C语言数据结构之利用栈将中缀表达式转换为后缀表达式
- 《算法》第一章——中缀表达式转前缀和后缀表达式
- 前缀表达式、中缀表达式和后缀表达式
- 重学数据结构006――中缀表达式转后缀表达式
- 【转】中缀表达式转换成前缀表达式和后缀表达式
- 中缀表达式转化成后缀表达式
- 中缀表达式转后缀表达式(考虑优先级)
- 把中缀表达式转化为后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转换成后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式 并计算后缀表达式
- 将中缀表达式转换成后缀表达式
- 数据结构 c语言设计堆栈 并将中缀表达式转换成后缀表达式
- 堆栈实现中缀表达式转后缀表达式及计算表达式的值