java數(shù)據(jù)結(jié)構(gòu)與算法之中綴表達(dá)式轉(zhuǎn)為后綴表達(dá)式的方法
本文實(shí)例講述了java數(shù)據(jù)結(jié)構(gòu)與算法之中綴表達(dá)式轉(zhuǎn)為后綴表達(dá)式的方法。分享給大家供大家參考,具體如下:
//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:算法實(shí)現(xiàn)不是很完善,有些復(fù)雜的表達(dá)式解析要出錯(cuò),寫出來做個(gè)紀(jì)念!
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
Springboot webscoket自定義定時(shí)器
這篇文章主要介紹了Springboot webscoket自定義定時(shí)器問題,總的來說這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達(dá)的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過程。希望通過這道題能給你帶來一種解題優(yōu)化的思路2023-01-01Java?詳細(xì)講解線程的狀態(tài)及部分常用方法
在Java程序中,一個(gè)線程對(duì)象只能調(diào)用一次start()方法啟動(dòng)新線程,并在新線程中執(zhí)行run()方法。一旦run()方法執(zhí)行完畢,線程就結(jié)束了,本篇來講解Java線程的狀態(tài)以及部分常用方法2022-04-04IDEA SpringBoot項(xiàng)目配置熱更新的步驟詳解(無需每次手動(dòng)重啟服務(wù)器)
這篇文章主要介紹了IDEA SpringBoot項(xiàng)目配置熱更新的步驟,無需每次手動(dòng)重啟服務(wù)器,本文通過圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04java保留小數(shù)的四種實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了java保留小數(shù)的四種實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11javaweb servlet生成簡(jiǎn)單驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了javaweb servlet生成簡(jiǎn)單驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03Java基礎(chǔ)學(xué)習(xí)之反射機(jī)制原理詳解
反射是框架的靈魂,Java框架底層都是用反射機(jī)制+xml配置等來實(shí)現(xiàn)的,本文將通過示例詳細(xì)講解Java中的反射機(jī)制,感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下2022-03-03Java多線程的調(diào)度_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
有多個(gè)線程,如何控制它們執(zhí)行的先后次序呢?下文給大家分享四種方法及java多線程調(diào)度的實(shí)例代碼,需要的朋友參考下吧2017-05-05