中缀,后缀表达式

后缀表达式的计算

算法描述:

1.遇到两个分量,就压入栈中。

2.遇到运算符就从栈中取出两个分量,计算结果,并将结果压入栈中。

具体实现:

 1 private static Stack<Double> stack=new Stack<Double>();
 2        public void calcufix(char expr){
 3            double left=0.0;
 4            double right=0.0;
 5            if(get2opreate()){
 6                right=stack.pop();
 7                left=stack.pop();
 8            }
 9            switch(expr){
10            case ‘+‘:
11                stack.add(left+right);break;
12            case ‘-‘:
13                stack.add(left-right);break;
14            case ‘*‘:
15                stack.add(left*right);break;
16            case ‘/‘:
17                stack.add((double)left/right);break;
18            case ‘^‘:
19                stack.add(Math.pow(left, right));break;
20            }
21        }
22
23        public Boolean get2opreate(){
24           Boolean result=false;
25           if(stack.size()>=2){
26               result=true;
27           }
28           return result;
29        }
30
31    public static void main(String[]args){
32        postfix fix=new postfix();
33        Scanner sc=new Scanner(System.in);
34       String line= sc.next();
35       char [] list=line.toCharArray();
36       for(int i=0;i<list.length;i++){
37           if(list[i]==‘+‘||list[i]==‘-‘||list[i]==‘*‘||list[i]==‘/‘||list[i]==‘^‘){
38               fix.calcufix(list[i]);
39           }else{
40             //  System.out.println((double)(list[i]-‘0‘));
41               fix.stack.add((double)(list[i]-‘0‘));
42           }
43       }
44
45       Double answer=stack.pop();
46       System.out.println(answer);
47
48    }

infix --- ->postfix

算法:

1.遇到分量直接输出。

2.遇到运算符,比较当前运算符和栈顶运算符的优先级,当前<=栈顶就输出,直到不<=。否则压栈

3.考虑到输出,应该在最后加入#运算符。最小优先级的,使表达式能够结束。

4.对于( 压入栈中,遇到)将栈中元素输出,直到遇到(.

时间: 2025-01-05 17:27:55

中缀,后缀表达式的相关文章

前缀 中缀 后缀表达式

1.前缀表达式叫波兰式,后缀叫逆波兰式 2.中缀表达式转另外两个比较简单,前后缀装中缀较麻烦 3.问题分求表达式还是求值,如果是求值则需要两个栈,一个是操作符栈,一个是操作数栈,等操作符栈入栈完毕后依次出栈,并把操作数栈顶两个操作数计算并将 结果重新压入栈 4.只有中缀表达式有括号一说,波兰式和逆波兰式的运算顺序严格定义,不需要括号 5.计算机并没有中缀计算能力,需转化为波兰式或逆波兰式 6.波兰式和逆波兰式转中缀的编程题还没见到,只见到填空题有,可能因为计算机更需要的是波兰式和逆波兰式 7.中

中缀表达式与前、后缀表达式转化简单的技巧[转]

35,15,+,80,70,-,*,20,/ //后缀表达方式 (((35+15)*(80-70))/20)=25 //中缀表达方式 /,*,+,35,15,-,80,70, 20 //前缀表达方式 人的思维方式很容易固定~~!正如习惯拉10进制.就对2,3,4,8,16等进制不知所措一样~~! 人们习惯的运算方式是中缀表达式.而碰到前缀,后缀方式..迷茫其实仅仅是一种表达式子的方式而已(不被你习惯的方式) 我这里教你一种也许你老师都没跟你讲的简单转换方式 一个中缀式到其他式子的转换方法 这里我

中缀表达式转为后缀表达式

** * 中缀表达式转后缀表达式 * * 作用:将一长串计算表达式转换为计算机易于操作的字符序列,用于计算器的设计 *  * 参与转换运算符 * +-/*()^% * * * 使用StringBuilder来保存转换出的后缀表达式 * 使用栈来操作运算符 * * * 转换原则 * 1.上述字符中()没有优先级值,+-优先级值为1,/*%优先级值为2,^优先级值为3 * 2.对于一个待计算的表达式,从左向右逐个检查每个字符 * 3.遇到数字,直接append到StringBuilder * 4.遇

中缀表达式转后缀表达式的方法:

1.遇到操作数:直接输出(添加到后缀表达式中)2.栈为空时,遇到运算符,直接入栈3.遇到左括号:将其入栈4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出.5.遇到其他运算符:加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈6.最终将栈中的元素依次出栈,输出.例如a+b*c+(d*e+f)*g ----> abc*+de*f+g*+ 遇到a:直接输出:后缀表达式:a堆栈:空 遇到+:堆栈:空,所以+入栈后缀表达式:a堆栈:+遇到b: 直

中缀表达式转后缀表达式

写之前应该介绍一个厉害的波兰数学家--Jan Lukasiewicz(鲁卡谢维奇),他想到了一种不需要括号的后缀表达法,我们为了纪念他,把它称为逆波兰(Reverse Polish Notation,RPN)表示. 我们把平时所用的标准四则运算表达式,如:9+(3-1)×3+10/2,称为中缀表达式. 把9 3 1 - 3 * + 10 2 / +(此处由上一行的中缀表达式例子转化而来) 这种不需要括号表示的形式叫做后缀表达式,也是计算机非常喜欢的计算式. 转换规则: 从左到右遍历中缀表达式的每

中缀表达式转化为后缀表达式

后缀表达式 逆波兰记法中,操作符置于操作数的后面.例如表达"三加四"时,写作"3 4 +",而不是"3 + 4".如果有多个操作符,操作符置于第二个操作数的后面,所以常规中缀记法的"3 - 4 + 5"在逆波兰记法中写作"3 4 - 5 +":先3减去4,再加上5.使用逆波兰记法的一个好处是不需要使用括号.例如中缀记法中"3 - 4 * 5"与"(3 - 4)*5"不

前缀、中缀、后缀表达式

先举例: (3 + 4) × 5 - 6 中缀表达式- × + 3 4 5 6 前缀表达式3 4 + 5 × 6 - 后缀表达式 以前没见过前缀和后缀表达式,感觉一下刷新了知识库!原来在计算机里早已司空见惯了…… 完了,一下暴露非科班出身了……不扯了,下面这篇文章对这三种表达式介绍的很不错,特拿来分享下! 地址:http://blog.csdn.net/antineutrino/article/details/6763722

中缀表达式转换前\后缀表达式的总结

本次个人程序设计要求做一个带有计算功能的程序,而要计算就离不开表达式,按照一般人的习惯,中缀表达式是一个非常常用的方式.但是,对于我们程序员来说,直接计算中缀表达式并不是那么方便,因此,通常来说我们会将中缀表达式进行转换. 不论是转成前缀表达式还是后缀表达式,通过树进行转换都是可以实现的,同时,一棵树就能完成前\中\后缀表达式的互相转换,因此如果仅仅要求转换并且频繁的转换,建立一棵树无疑是方便的.但是,对于计算而言,转换只是其中的一步,因此我们更要考虑效率问题,那么堆栈法就成了我们的首选.堆栈是

中缀表达式转换成后缀表达式

中缀表达式即普通的运算式子,运算符是以中缀形式处于操作数的中间(例:3 + 4),后缀表达式就是逆波兰式(例:3 4 +),中缀表达式转后缀表达式也是学习数据结构中的栈的时候一个典型的例子,结合上一次写到逆波兰式.可以用这种原理即输入普通式子(即中缀表达式),转换成后缀表达式,然后通过后缀表达式(逆波兰式)的计算,可以得出结果. 1 #include <stdio.h> 2 #include <stdlib.h> 3 #define STACK_INIT_SIZE 20 4 #de

中缀表达式转前缀和后缀表达式

中缀转前缀 #ifndef POSTFIX_TO_NIFIXEXPRESS_H #define POSTFIX_TO_NIFIXEXPRESS_H #include<iostream> #include<string> #include<stack> /************************************************************************/ /* 中缀表达式转前缀表达式 建立一个栈来保存运算符,和一个字符容器存字