您的位置:首页 > 理论基础 > 数据结构算法

栈的应用:通过用户输入后缀表达式,利用数据结构栈计算其结果值。

2014-04-12 18:30 766 查看
package none004解析计算表达式栈;
//通过用户输入后缀表达式,利用数据结构栈计算其结果值。
import java.io.*;
import java.util.*;
public class PostfixApp {

/**
* @param args
*/
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub

String input;
int output;
while(true){
System.out.print("Enter postfix: ");
System.out.flush();
input=getString();
if(input.equals(""))
break;
ParsePost pp=new ParsePost(input);
output=pp.doParse();
System.out.println("Evaluates to "+output);

}
}
public static String getString() throws IOException{
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
String s=br.readLine();
return s;

}
}
class ParsePost{
private StackX theStack;
private String input;
public ParsePost(String s){
input=s;
}
public int doParse(){
theStack=new StackX(20);
char ch;
int j;
int num1,num2,interAns;
for(j=0;j<input.length();j++){
ch=input.charAt(j);
theStack.displayStack(""+ch+" ");
if(ch>='0'&&ch<='9')
theStack.push((int)(ch-'0'));
else {
num2=theStack.pop();
num1=theStack.pop();
switch(ch){
case '+':
interAns=num1+num2;
break;
case '-':
interAns=num1-num2;
break;
case '*':
interAns=num1*num2;
break;
case '/':
interAns=num1/num2;
break;
default:
interAns=0;
}
theStack.push(interAns);
}
}
interAns=theStack.pop();
return interAns;
}
}
class StackX{
int items;
int[] arrayStack;
int s;
StackX(int  max){
s=max;
arrayStack=new int[s];
items=-1;
}
public void push(int value){
if(items==s-1) System.out.println("栈已经等于最大值了。");
else arrayStack[++items]=value;
}
public int pop(){
return arrayStack[items--];
}
public boolean isEmpty(){
return items==-1;
}
public int peek(){
if(items==-1) return 0;
else return arrayStack[items];
}
public boolean isFull(){
return items==s-1;
}
public int size(){
return items+1;
}
public void displayStack(String s){
System.out.print(s);
System.out.print("Stack(bottom-->top: ");
for(int j=0;j<size();j++){
System.out.print(peek());
System.out.print(' ');
}
System.out.println("");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: