java數據構造與算法當中綴表達式轉為後綴表達式的辦法。本站提示廣大學習愛好者:(java數據構造與算法當中綴表達式轉為後綴表達式的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是java數據構造與算法當中綴表達式轉為後綴表達式的辦法正文
本文實例講述了java數據構造與算法當中綴表達式轉為後綴表達式的辦法。分享給年夜家供年夜家參考,詳細以下:
//stack public 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; } } //InToPost public 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(); } } } } //Test public 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法式設計有所贊助。