中序表达式转换成后序表达式问题(栈的应用)
来源:互联网 发布:志愿者数据库 编辑:程序博客网 时间:2024/06/03 10:50
中序表达转换成后序表达式的方法:
从左到右读取该中弱序表达式:
1.若是操作数,则直接输出.
2.若是运算符:
(1)若该运算符为"(",则直接入栈.
(2)若该运算符为")",则取出堆栈中的运算符,直到"("时.
(3)其它: 按优先级比较,如果大于或等于堆栈中当前的运算则压入栈中,否则直接输出.
从左到右读取该中弱序表达式:
1.若是操作数,则直接输出.
2.若是运算符:
(1)若该运算符为"(",则直接入栈.
(2)若该运算符为")",则取出堆栈中的运算符,直到"("时.
(3)其它: 按优先级比较,如果大于或等于堆栈中当前的运算则压入栈中,否则直接输出.
(4)检查栈是否非空,如果非空,则输出所有值,直到空为止.
*、/、%的优先级当然比+、-高了
例如:中序表达式(23+34*45/(5+6+7))转换成后序表达式23 34 45 * 5 6 + 7 + / +
后序表达式用处:
当转换成后序表达式后更方便计算表达式的值,如将后序表达式的元素依次进栈直到遇到运算符,这时候从栈中弹出两个元素,再结合运算符计算出这两个数运算的结果(如34*45=1530),将其结果压栈(此时栈元素为23 1530),然后继续将后序非符号元素压栈,直到遇到运算符。重复之前的操作。。。
InfixExp(中序表达式)转换PostfixExp(后序表达式)算法:
1)当输入的是操作数时候,直接输出到后序表达式PostfixExp序列中
2)当输入开括号时候,把它压栈
3)当输入的是闭括号时候,先判断栈是否为空,若为空,则发生错误并进行相关处理。若非空,把栈中元素依次弹出并输出到Postfix中,知道遇到第一个开括号,若没有遇到开括号,也发生错误,进行相关处理
4)当输入是运算符op(+、- 、×、/)时候
a)循环,当(栈非空and栈顶不是开括号and栈顶运算符的优先级不低于输入的运算符的优先级)时,反复操作:将栈顶元素弹出并添加到Postfix中
b)把输入的运算符op压栈
5)当中序表达式InfixExp的符号序列全部读入后,若栈内扔有元素,把他们依次弹出并放到后序表达式PostfixExp序列尾部。若弹出的元素遇到空括号,则说明不匹配,发生错误,并进行相关处理
0 0
- 中序表达式转换成后序表达式问题(栈的应用)
- 中序表达式转换成后序表达式问题(栈的应用)
- 栈的应用-中序表达式转后序表达式
- 栈的应用:后缀表达式到中缀表达式的转换
- 栈的应用之中缀表达式转换为后缀表达式
- 栈的应用4--中缀表达式转换为后缀表达式
- pat Data_stucture 表达式转换-栈的应用
- C++栈的应用——后缀表达式求值、中缀表达式到后缀表达式的转换
- 栈的应用 后缀表达式求值 后缀表达式与中缀表达式的转换
- 【数据结构】栈的应用---四则运算表达式求值(中缀表达式与后缀表达式转换)
- JS中应用正则表达式转换大小写
- css中表达式的应用
- 栈的应用举例:数制转换,表达式求值
- 表达式转换(25 分)(栈的应用)
- 栈的应用--中缀表达式转换为后缀表达式&逆波兰计算器的实现
- 前序、中序、后序表达式的相互转换问题
- 中缀表达式转换成后缀表达式并求值(C++栈的应用)
- Chapter4:栈的应用-将中缀表达式转换为后缀表达式
- mybatis 批量插入数据
- 查看Tomcat用户和密码
- 关于几个报错的解决
- 测试驱动开发TDD(四)Google Test系列(目录)
- CvScalar结构
- 中序表达式转换成后序表达式问题(栈的应用)
- hduoj1028!【母函数】
- Dijkstra模板
- js错误 unterminated string literal
- xcode 在一个界面中打开多个子界面,实现跳转不影响
- DontDestroyOnLoad 重复实例化
- Binary Tree Level Order Traversal
- [Android] Android开发优化之——使用软引用和弱引用
- 身在户外该如何使用求生哨