时间:2021-05-19
本文实例讲述了java数据结构与算法之中缀表达式转为后缀表达式的方法。分享给大家供大家参考,具体如下:
//stackpublic class StackX { private int top; private char[] stackArray; private int maxSize; //constructor public StackX(int maxSize){ this.maxSize = maxSize; this.top = -1; stackArray = new char[this.maxSize]; } //put item on top of stack public void push(char push){ stackArray[++top] = push; } //take item from top of stack public char pop(){ return stackArray[top--]; } //peek the top item from stack public char peek(){ return stackArray[top]; } //peek the character at index n public char peekN(int index){ return stackArray[index]; } //true if stack is empty public boolean isEmpty(){ return (top == -1); } //return stack size public int size(){ return top+1; }}//InToPostpublic class InToPost { private StackX myStack; private String input; private String outPut=""; //constructor public InToPost(String input){ this.input = input; myStack = new StackX(this.input.length()); } //do translation to postFix public String doTrans(){ for(int i=0; i<input.length(); i++){ char ch = input.charAt(i); switch(ch){ case '+': case '-': this.getOper(ch,1); break; case '*': case '/': this.getOper(ch,2); break; case '(': this.getOper(ch, 3); break; case ')': this.getOper(ch, 4); break; default: this.outPut = this.outPut + ch; } } while(!this.myStack.isEmpty()){ this.outPut = this.outPut + this.myStack.pop(); } return this.outPut; } //get operator from input public void getOper(char ch, int prect1){ char temp; if(this.myStack.isEmpty()||prect1==3){ this.myStack.push(ch); } else if(prect1==4){ while(!this.myStack.isEmpty()){ temp = this.myStack.pop(); if(temp=='(')continue; this.outPut = this.outPut + temp; } } else if(prect1==1){ temp = this.myStack.peek(); if(temp=='(') this.myStack.push(ch); else{ this.outPut = this.outPut + this.myStack.pop(); this.myStack.push(ch); } } else{ temp = this.myStack.peek(); if(temp=='('||temp=='+'||temp=='-') this.myStack.push(ch); else{ this.outPut = this.outPut + this.myStack.pop(); } } }}//Testpublic class TestInToPost { private static InToPost inToPost; private static String str; public static void main(String []args){ str = "((A+B)*C)-D"; inToPost = new InToPost(str); System.out.println(inToPost.doTrans()); }}PS:算法实现不是很完善,有些复杂的表达式解析要出错,写出来做个纪念!
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
C语言数据结构之中缀树转后缀树的实例对于一个中缀表达式a+b*c*(d-e/f)转换成后缀是这样的形式abc*def/-+后缀表达式是相当有用处的,转换成后缀表
本文实例为大家分享了C语言实现中缀表达式转后缀表达式的具体代码,供大家参考,具体内容如下中缀表达式转换为后缀表达式(思路)1.创建栈2.从左向右顺序获取中缀表达
一、算法1、算法的主要思想就是将一个中缀表达式(Infixexpression)转换成便于处理的后缀表达式(Postfixexpression),然后借助于栈这
逆波兰表达式定义:传统的四则运算被称作是中缀表达式,即运算符实在两个运算对象之间的。逆波兰表达式被称作是后缀表达式,表达式实在运算对象的后面。逆波兰表达式:a+
本文实例为大家分享了C++实现中缀表达式转后缀表达式的具体代码,供大家参考,具体内容如下一、思路:和中缀表达式的计算类似,只不过不用计算,把表达式输出即可1.用