Technique 1000. Infix, Prefix, Postfix Expression.
来源:互联网 发布:甘肃广电网络客服电话 编辑:程序博客网 时间:2024/05/28 17:06
前阵子做过相关的.
趁记忆犹新, 总结总结!
对于给定的一个的表达式: a * b + c * d. 我们称之为infix表达式. 这是我们看得比较习惯的方式.
但是编译器这样看不好, 不像人可以自动辨别优先级. 所以出现了 prefix 和 postfix 两种表达式, 其中prefix是操作符在前, postfix是操作符在后.
手工转换非常简单, 只要给所有运算添上括号, 然后将括号中的操作符移动到括号外, 最后移除括号就能得出 postfix 或者 prefix 表达式.
如转换为prefix: a * b + c * d → ((a * b) + (c * d)) → + ( * (a b) * (c d)) → + * a b * c d
转换为postfix: a * b + c * d → ((a * b) + (c * d)) → ((a b) * (c d) * ) + → a b * c d * +
程序转换:
转prefix:
1.存两个堆栈, 一个存放操作数, 一个存放运算符
2.由于要转换为prefix, 运算符在操作数前, 所以扫描从中缀表达式的右往左扫描.
3.如果是操作数, 则直接压进操作数栈中
4.如果是运算符, 分以下情况:
a. 运算符堆栈为空, 或者运算符栈顶元素为')', 则直接将运算符压进栈
b. 运算符如果是'(', 则将运算符栈中的元素都压进去操作数栈中并将其弹出运算符栈, 直到遇到')'为止
c. 运算操作符是'+' '-' '*' '/' 之一的时候, 将其与运算符栈顶元素作比较,如果优先级相同, 或者栈顶的优先级较小, 则将运算符压入栈中.
否则, 将栈顶元素弹出并压入操作数栈中, 然后继续比较栈顶, 直到运算符被压入栈.
5.扫描完一遍后, 将运算符堆栈剩余的元素都压入操作数栈中.
6.将操作数栈从栈顶到栈底输出就是prefix.
转postfix:
1.一个存放结果的输出队列, 一个存放运算符的堆栈
2.由于要转换为postfix, 运算符在操作数后, 所以扫描从中缀表达式的左往右扫描.
3.如果是操作数, 则直接压进输出队列中
4.如果是运算符, 分以下情况:
a. 运算符堆栈为空, 或者运算符栈顶元素为'(', 则直接将运算符压进栈
b. 运算符如果是')', 则将运算符栈中的元素都压进去输出队列中并将其弹出运算符栈, 直到遇到'('为止
c. 运算操作符是'+' '-' '*' '/' 之一的时候, 将其与运算符栈顶元素作比较,如果栈顶的优先级较小, 则将运算符压入栈中.
否则, 将栈顶元素弹出并压入输出队列中, 然后继续比较栈顶, 直到运算符被压入栈.
5.扫描完一遍后, 将运算符堆栈剩余的元素都压入输出队列中.
6.将队列输出就是postfix.
计算prefix表达式的值:
1. 用一个堆栈存放中间结果.
2.从右往左扫描前缀表达式.
a. 如果遇到操作数, 直接压进栈
b. 遇到运算符, 将栈顶元素弹出置于左操作数, 再弹出一个栈顶元素置于右操作数. 然后进行运算:"左操作数 运算符 右操作数". 生成结果压入栈中
3.扫描完后, 将栈中的结果输出便是答案
计算postfix表达式的值:
1. 用一个堆栈存放中间结果.
2.从左往右扫描后缀表达式.
a. 如果遇到操作数, 直接压进栈
b. 遇到运算符, 将栈顶元素弹出置于右操作数, 再弹出一个栈顶元素置于左操作数. 然后进行运算:"左操作数 运算符 右操作数". 生成结果压入栈中
3.扫描完后, 将栈中的结果输出便是答案
- Technique 1000. Infix, Prefix, Postfix Expression.
- infix prefix postfix的区别
- Convert infix expression to prefix expression
- Program work 4. Infix expression convert to Prefix expression (Ⅰ)
- Program work 4. Infix expression convert to Prefix expression (Ⅱ)
- Infix to Postfix Convertor
- 【数据结构与算法基础】栈及其应用后缀、中缀表达式 / Stack and postfix/infix expression
- 前缀式转中缀式Convert prefix to postfix expression
- 前缀式转中缀式C Program to convert Prefix Expression into INFIX
- Infix Expression Evaluator
- 1130. Infix Expression (25)
- 1130. Infix Expression (25)
- 1130. Infix Expression 引用
- 1130. Infix Expression (25)
- 1130. Infix Expression (25)
- 1130. Infix Expression (25)
- 1130. Infix Expression (25)
- 1130. Infix Expression (25)
- Windows分页管理机制的学习(一)理论部分
- SqlServer,无法为该请求检索数据, 尝试打开或创建物理文件,CREATE FILE 遇到操作系统错误(拒绝访问)。
- Mac 10.9安装php扩展mcrypt
- Java面试必须要知道的SQL语法,语句
- Vijos P1117 数的划分
- Technique 1000. Infix, Prefix, Postfix Expression.
- windows 8.0上eclipse 4.4.0 配置centos 6.5 上的hadoop2.2.0开发环境
- 第十一周上机项目6-2 回文数的判断 isPalindrome
- c# 单元测试工程如何取得当前项目路径
- UIButton上的图片和文字位置调整
- JavaScript的“默认参数”的实现
- Windows分页管理机制的学习(一)实践1
- HTML中的链接到另外一个页面的标签<a>的用法与规则
- 设计模式学习之备忘录模式(Memento,行为型模式)(19)