在我们的日常生活中,中缀表达式是最常用的计算表达方式3*(-2+4),这种表达方式的优点就是表达的意义容易理解,一目了然。然而,这种表达方式在计算机识别方面缺十分不方便,其原因主要是,括号对于优先级的限制给编写识别程序造成了不便。
然而后缀表达式对于计算机的解析有这很大的遍历,它不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:21+3*,即(2 + 1) * 3。
那么,如何将中缀表达式转化为后缀表达式呢,从本质上来说,中缀表达式是对于一颗计算树的中序遍历,同理,后缀表达式则是对它的后顺序遍历。那么其中的一种思路是首先根据中缀表达式构造计算树,然后对之后序遍历即可。
具体过程可以通过一个栈和一个后缀列表来完成:
1. 从左到右读取中缀表达式中的一项
2. 如果是操作数直接进入后缀列表.
3. 读到左括号时总是将它压入栈中.
4. 读到右括号, 将最近栈顶的第一个左括号上面的操作符全部依次弹出, 送至输出队列后, 再丢弃左括号.
5. 当读到操作符时,将该操作符与栈顶操作符比较,如果栈顶操作符优先级大于等于该操作符,那么将栈顶元素弹出到列表,重复次操作,直到遇到括号,或者是优先级小于该操作符,最后将该操作符,压入栈顶
6. 中缀表达式全部读完后,若栈中仍然有运算符,将其送到输出队列中.
其中值得注意的是单目运算符,如-,!等,!!!!false这中情况需要特殊处理
分享到:
相关推荐
数据结构(C语言版)的中缀表达式与逆波兰表达式转化问题。
利用C语言实现中缀表达式转化为后缀表达式!!利用栈。
中缀表达式转化为后缀表达式中缀表达式转化为后缀表达式
将由数字和四则运算符组成的后缀表达式变换为中缀表达式。输入的后缀表达式包含的运算符不超过15个。要求转换后的中缀表达式中不应出现不必要的括号。例如,整个表达式两端的括号要省略,不影响原计算顺序的括号要...
数据结构算法:中缀表达式转化为后缀表达式.doc 详细的论述和代码!
包含中缀转后缀以及后缀表达式计算(或中缀记法)是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术表示方法。 与前缀表达式(例:+ 3 4)或后缀...
自定义栈,中缀表达式转换为后缀表达式并求值,三个抽象数据类型定义(1.class stack 2.class Middle_expressionToPost_expression 3.class Post_expression_value)
从键盘输入中缀表达式,建立操作数与运算符堆栈,计算并输出表达式的求值结果。 基本要求:实现 +, -, *, /四个二元运算符以及(); 操作数范围为0至9。 提高要求:实现+, -, *, /四个二元运算符以及(); 实现+...
将中缀表达式,转换为后缀表达式。 并由中缀表达式及后缀表达式生成二叉树,用于判断表达式是否合法。(包括表达式的逻辑判断)
功能实现,包括括号,乘方,加减乘除,等号
中缀表达式转换为后缀表达式,用堆栈实现!!!!!!!!
表达式2*(9+6/3-5)+4,称为中缀表达式,表示成2 9 6 3 / + 5 - * 4 +称为后缀表达式,表示成+ * 2 - + 9 / 6 3 5 4称为前缀表达式。 ·基本要求 将中缀表达式,转换为后缀表达式和前缀表达式,再分别计算转换后的...
从键盘输入中缀表达式,建立操作数与运算符堆栈,计算并输出表达式的求值结果。 基本要求:实现 +, -, *, /四个二元运算符以及(); 操作数范围为0至9。 提高要求:实现+, -两个一元运算符(即正、负号); 操作...
中缀表达式转化成后缀表达式并计算C++实现
用C++实现计算一个字符串形式的中缀表达式的值。代码实现了算术表达式的词法分析,能支持多位整型的计算。思路是将中缀表达式转化成后缀表达式计算。
表达式的转换中缀表达式转化为后缀表达式 C语言编程
将简单的中缀表达式转换成表达式树,然后利用表达式树对中缀表达式进行求值。
按照惯例,算术表达式一般都写成中缀形式,即运算符总是出现在两个操作数之间,单目运算符除外),称为中缀表达式.编译系统对中缀表达式的处理方法是先把它转换为后后缀表达式.在后缀表达式中,运算符位于两个操作数的后面...
不错的程序 中缀表达式转化为逆波兰式 java语言写的
这是一个关于中缀表达式求值的小程序,能完成给定中缀表达式的加减乘除运算,并能正确输出转化后的后缀表达式