欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java數(shù)據(jù)結(jié)構(gòu)與算法之中綴表達式轉(zhuǎn)為后綴表達式的方法

 更新時間:2016年08月09日 11:50:16   作者:modun  
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)與算法之中綴表達式轉(zhuǎn)為后綴表達式的方法,簡單分析了java中綴表達式轉(zhuǎn)為后綴表達式的相關(guān)實現(xiàn)方法與技巧,需要的朋友可以參考下

本文實例講述了java數(shù)據(jù)結(jié)構(gòu)與算法之中綴表達式轉(zhuǎn)為后綴表達式的方法。分享給大家供大家參考,具體如下:

//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:算法實現(xiàn)不是很完善,有些復雜的表達式解析要出錯,寫出來做個紀念!

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

  • Springboot webscoket自定義定時器

    Springboot webscoket自定義定時器

    這篇文章主要介紹了Springboot webscoket自定義定時器問題,總的來說這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過程。希望通過這道題能給你帶來一種解題優(yōu)化的思路
    2023-01-01
  • ManyToMany單向、雙向:@JoinTable的使用

    ManyToMany單向、雙向:@JoinTable的使用

    這篇文章主要介紹了ManyToMany單向、雙向:@JoinTable的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • PowerJob的Evaluator方法工作流程源碼解讀

    PowerJob的Evaluator方法工作流程源碼解讀

    這篇文章主要介紹了PowerJob的Evaluator方法工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Java?詳細講解線程的狀態(tài)及部分常用方法

    Java?詳細講解線程的狀態(tài)及部分常用方法

    在Java程序中,一個線程對象只能調(diào)用一次start()方法啟動新線程,并在新線程中執(zhí)行run()方法。一旦run()方法執(zhí)行完畢,線程就結(jié)束了,本篇來講解Java線程的狀態(tài)以及部分常用方法
    2022-04-04
  • IDEA SpringBoot項目配置熱更新的步驟詳解(無需每次手動重啟服務(wù)器)

    IDEA SpringBoot項目配置熱更新的步驟詳解(無需每次手動重啟服務(wù)器)

    這篇文章主要介紹了IDEA SpringBoot項目配置熱更新的步驟,無需每次手動重啟服務(wù)器,本文通過圖文實例代碼相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • java保留小數(shù)的四種實現(xiàn)方法

    java保留小數(shù)的四種實現(xiàn)方法

    這篇文章主要為大家詳細介紹了java保留小數(shù)的四種實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • javaweb servlet生成簡單驗證碼

    javaweb servlet生成簡單驗證碼

    這篇文章主要為大家詳細介紹了javaweb servlet生成簡單驗證碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Java基礎(chǔ)學習之反射機制原理詳解

    Java基礎(chǔ)學習之反射機制原理詳解

    反射是框架的靈魂,Java框架底層都是用反射機制+xml配置等來實現(xiàn)的,本文將通過示例詳細講解Java中的反射機制,感興趣的小伙伴可以跟隨小編學習一下
    2022-03-03
  • Java Map集合用法詳解

    Java Map集合用法詳解

    Map用于保存具有映射關(guān)系的數(shù)據(jù),Map集合里保存著兩組值,一組用于保存Map的ley,另一組保存著Map的value;Map集合和查字典類似,通過key找到對應(yīng)的value,通過頁數(shù)找到對應(yīng)的信息。用學生類來說,key相當于學號,value對應(yīng)name,age,sex等信息。用這種對應(yīng)關(guān)系方便查找
    2021-10-10
  • Java多線程的調(diào)度_動力節(jié)點Java學院整理

    Java多線程的調(diào)度_動力節(jié)點Java學院整理

    有多個線程,如何控制它們執(zhí)行的先后次序呢?下文給大家分享四種方法及java多線程調(diào)度的實例代碼,需要的朋友參考下吧
    2017-05-05

最新評論