软件编程
位置:首页>> 软件编程>> java编程>> java数据结构与算法之中缀表达式转为后缀表达式的方法

java数据结构与算法之中缀表达式转为后缀表达式的方法

作者:modun  发布时间:2023-11-22 12:51:35 

标签: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程序设计有所帮助。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com