您的位置:首页 > 其它

Chapter4:栈的应用-将中缀表达式转换为后缀表达式

2015-05-07 10:50 471 查看
package chapter4;

import java.util.Scanner;

public class Infix {

 /**

  * @将中缀表达式转化为后缀表达式,为表达式求值做准备

  * (A+B)*C-D/(E+F)

  * AB+C*DEF+/-

  */

 public static void main(String[] args) {

  while(true){

   Scanner sc = new Scanner(System.in);

   String input = sc.nextLine();

   if(input=="")

    break;

   InToPost thePost = new InToPost(input);

   String output = thePost.doTrans();

   System.out.println("output: "+output);

  }

 }

}

class StackA{

 private int maxSize;

 private char[] stackArray;

 private int top;

 

 public StackA(int max){

  maxSize = max;

  stackArray = new char[maxSize];

  top=-1;

 }

 public void push(char value){

  stackArray[++top] = value;

 }

 public char pop(){

  return stackArray[top--];  

 }

 public char peek(){

  return stackArray[top];

 }

 public boolean isEmpty(){

  return top==-1;

 }

 public int size(){

  return top+1;

 }

 public char peekN(int n){

  return stackArray
;

 }

 public void displayStack(String s){

  System.out.println(s);

  System.out.println("display stack from bottom-->top:");

  for(int i=0;i<size();i++){

   System.out.print(peekN(i)+" ");

  }

  System.out.println();

 }

}

class InToPost{

 private String input;

 private String output;

 private StackA theStack;

 public InToPost(String in){

  input = in;

  output = "";

  theStack = new StackA(input.length());

 }

 public String doTrans(){

  for(int i=0;i<input.length();i++){

   char ch = input.charAt(i);

   System.out.println("push "+ch+" to stack");

   //theStack.displayStack("For "+ch+" ");

   switch(ch){

   case '+':

   case '-':

    gotOper(ch,1);

    break;

   case '*':

   case '/':

    gotOper(ch,2);

    break;

   case '(':

    theStack.push(ch);

    break;

   case ')':

    gotParen(ch);

    break;

   default:

    output = output+ch;

    break;

   }

  }

  while(!theStack.isEmpty()){

   char temp = theStack.pop();

   output = output+temp;

  }

  return output;

 }

 public void gotOper(char opThis,int pre1){

  while(!theStack.isEmpty()){

   char opTop = theStack.pop();

   if(opTop=='('){

    theStack.push(opTop);

    break;

   }

   else{

    int pre2;

    if(opTop=='+' || opTop=='-')

     pre2 = 1;

    else

     pre2 = 2;

    if(pre2<pre1){

     theStack.push(opTop);

     break;

    }

    else

     output = output+opTop;

   }

  }

  theStack.push(opThis);

 }

 public void gotParen(char opThis){

  while(!theStack.isEmpty()){

   char opTop = theStack.pop();

   if(opTop=='(')

    break;

   else

    output = output+opTop;

  }

 }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐