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

来源:互联网 发布:数据恢复 编辑:程序博客网 时间:2024/05/01 17:36
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 stubString 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("");}}

0 0
原创粉丝点击