后缀表达式求值
2017-10-09 20:08
260 查看
实现将一般的数学表达式转化为后缀表达式并求值
package expr; import java.util.Scanner; import linkStack.LinkStack; /** * 任务三:栈的应用--后缀表达式求值 阅读教材及有关参考书。 (1)利用任务一中实现的栈(SeqStack或者LinkStack),实现一位数字的整型后缀表达式求值程序,编写主函数测试算法正确性。 (2)利用任务一中实现的栈(SeqStack或者LinkStack),实现实数(带小数点,位数不限)的后缀表达式求值程序,编写主函数测试算法正确性。 * @author asus * */ public class ExprDemo2 { static LinkStack<Character> s=new LinkStack<Character>(); static LinkStack<Double> s1=new LinkStack<Double>(); public static void main(String args[]){ Scanner sc=new Scanner(System.in); System.out.println("请输入要求值的表达式:"); String str=sc.nextLine(); System.out.println(str); s.add('#'); String pstr=transformz(str); System.out.println(pstr); double result=Calcu(pstr); System.out.println(result);//12*(3+61)/8 } public static String transformz(String str) { String pstr=""; for(int i=0;i<str.length();i++){ char c=str.charAt(i); if((c>='0' && c<='9') || c=='.'){ pstr=pstr+c; continue; } pstr=pstr+" "; if(c=='(') s.push(c); else if(c==')'){ while(s.getTop()!='(') { pstr+=s.pop(); } s.pop(); } else if(c=='+' || c=='-' || c=='*' || c=='/' || c=='%' || c=='^' ) { char operator=s.getTop(); while(Tokenpriority(c)<=Stackpriority(operator)) { pstr=pstr+operator; s.pop(); operator=s.getTop(); } s.push(c); } } while(!s.isEmpty()) pstr+=s.pop(); return pstr.substring(0, pstr.length()-1); } private static int Tokenpriority(char operator) { if(operator=='+' || operator=='-') return 1; if(operator=='*' || operator=='/' || operator=='%') return 2; if(operator=='^') return 4; if(operator=='(') return 5; return -1; } private static int Stackpriority(char operator) { if(operator=='+' || operator=='-') return 1; if(operator=='*' || operator=='/' || operator=='%') return 2; if(operator=='^') return 3; if(operator=='(') return 0; return -1; } public static Double Calcu(String str) { String pstr2=""; for(int i=0;i<str.length();i++) { char c=str.charAt(i); if((c>='0' && c<='9') || c=='.') { pstr2=pstr2+c; continue; } if(pstr2.length()>0){ Double n=Double.parseDouble(pstr2); s1.push(n.doubleValue()); } if(c=='+' || c=='-' || c=='*' || c=='/' || c=='%' || c=='^' ){ Double a=s1.pop(); Double b=s1.pop(); if(c=='+') s1.push(b+a); if(c=='-') s1.push(b-a); if(c=='*') s1.push(b*a); if(c=='/') s1.push(b/a); } pstr2=""; } return s1.pop(); } } //12.99289*(33.33+61)/8.3222
相关文章推荐
- 后缀表达式实现表达式求值
- 后缀表达式求值
- 表达式求值(前缀、中缀、后缀)
- 算术表达式系列之后缀表达式求值
- C语言 实现中缀表达式转后缀表达式并求值
- 中缀表达式转换成后缀表达式以及逆波兰表示法求值
- 数据结构上机题目4--后缀表达式求值
- 课程设计 栈之 后缀表达式求值 中缀表达式转后缀表达式
- 算术表达式求值(中缀转后缀,后缀求值,java 栈实现)
- 中缀表达式转后缀表达式 求值
- 栈的应用 后缀表达式求值 后缀表达式与中缀表达式的转换
- 前缀、中缀、后缀表达式及其求值
- C语言中缀表达式转后缀表达式并利用后缀表达式求值 (小于10)
- 【表达式求值】中缀表达式变后缀+后缀表达式的求法 (NYOJ 35+NYOJ 1272表达式求值)
- 后缀表达式求值
- C++Primer 练习9.52(续) 中缀表达式转后缀表达式求值
- 【数据结构】前缀后缀表达式求值
- 中缀表达式转成后缀表达式 后缀表达式求值
- 课程设计 栈之 后缀表达式求值 中缀表达式转后缀表达式
- 中缀转后缀及表达式求值