java实现逆波兰式

  • 格式:doc
  • 大小:19.00 KB
  • 文档页数:2

package stack;

/**

* 输入一个逆波兰式 以!结束 各个数字用非数字但不是!隔开

* 如35$5$/$6$+!

* 输出结果 13

* 使用栈的数据结构

*

* @author liuxin

*

*

*/

public class MyStack {

private int top=-1;//指向栈顶

private float data[];

private final int DeFault=50;//默认栈的大小

private char str[];//输入的字符数组

private char ch;

private int i=0;//字符标记

private int d=0;

public MyStack(char str[]){

top=-1;

data=new float[DeFault];

this.str=str;

DoWork();

}

public MyStack(char str[],int size){

top=-1;

data=new float[size];

this.str=str;

DoWork();

}

public void DoWork(){

ch=str[i];i++;

//以!结尾

while(ch!='!'){

switch(ch){

case '+':

data[top-1]=data[top-1]+data[top];

top--;

break;

case '-':

data[top-1]=data[top-1]-data[top];

top--; break;

case '*':

data[top-1]=data[top-1]*data[top];

top--;

break;

case '/':

data[top-1]=data[top-1]/data[top];

top--;

break;

default:

d=0;

while(ch>='0'&&ch<='9'){

d=d*10+ch-48;

ch=str[i];

i++;

};

top++;

data[top]=d;

break;

}

ch=str[i];

i++;

};

}

public String toString(){

return data[top]+"";

}

}