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]+"";
}
}