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

本文详细介绍了使用Java编程语言实现中缀表达式转换为后缀表达式(逆波兰表示法)的方法,包括创建堆栈类StackX以及转换类InToPost。虽然算法不完全适用于所有复杂表达式,但可以作为基础学习参考。
摘要由CSDN通过智能技术生成

本文实例讲述了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

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算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值