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

数据结构-栈-计算后缀表达式

2016-09-29 10:32 513 查看
package com.jikefriend.socket.datastructure.collection;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
* 计算后缀表达式
*/
public class Postfix
{

/**
* 用于存放数字的栈
*/
final static class StackX
{
private int maxSize;
private int[] stackArray;
private int top;

public StackX(int s)
{
maxSize = s;
stackArray = new int[maxSize];
top = -1;
}

public void push(int c)
{
stackArray[++top] = c;
}

public int pop()
{
return stackArray[top--];
}

public int peek()
{
return stackArray[top];
}

public boolean isEmpty()
{
return top == -1;
}

public int size()
{
return top + 1;
}

public int peekN(int n)
{
return stackArray
;
}

public void displayStack(String s)
{
System.out.print(s);
System.out.print("Stack (bottom --> top): ");
for (int i = 0; i < size(); i++)
{
System.out.print(peekN(i) + " ");
}
System.out.println();
}
}

/**
* 计算后缀表达式的结果
*/
final static 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;
break;
}
theStack.push(interAns);
}
}
interAns = theStack.pop();
return interAns;
}
}

public static void main(String[] args) throws IOException{
String input;
int output;
while (true)
{
System.out.print("Enter postfix: ");
System.out.flush();
input = getString();
if (input.equals(""))
break;
ParsePost theParse = new ParsePost(input);
output = theParse.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;
}

}


摘自《java数据结构与算法(第二版)》 [美] Robert Lafore 著
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: