亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

本文實(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í)器

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

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

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

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

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

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

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

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

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

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

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

    javaweb servlet生成簡(jiǎn)單驗(yàn)證碼

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

    Java基礎(chǔ)學(xué)習(xí)之反射機(jī)制原理詳解

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

    Java Map集合用法詳解

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

    Java多線程的調(diào)度_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

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

最新評(píng)論