zoukankan      html  css  js  c++  java
  • 算术表达式系列之后缀表达式求值

      1 package data.struct.algorithm;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.IOException;
      5 import java.io.InputStreamReader;
      6 
      7 class Stackfix2 {
      8     private int maxSize;
      9     private int stackArr[];
     10     private int top;
     11 
     12     public Stackfix2(int maxSize) {
     13         this.maxSize = maxSize;
     14         stackArr = new int[maxSize];
     15         top = -1;
     16     }
     17 
     18     // 进栈
     19     public void push(int value) {
     20         stackArr[++top] = value;
     21     }
     22 
     23     // 出栈
     24     public int pop() {
     25         return stackArr[top--];
     26     }
     27 
     28     // 显示栈顶元素
     29     public int peek() {
     30         return stackArr[top];
     31     }
     32 
     33     // 判断栈是否为空
     34     public boolean isEmpty() {
     35         return top == -1;
     36     }
     37 
     38     public boolean isFull() {
     39         return top == maxSize - 1;
     40     }
     41 }
     42 
     43 class Postfix {
     44     private Stackfix2 theStackfix2;
     45     private String input;
     46 
     47     public Postfix(String in) {
     48         input = in;
     49     }
     50 
     51     public int doCalculate() {
     52         int num1;
     53         int num2;
     54         int inresult;
     55         char ch;
     56         int j;
     57         theStackfix2 = new Stackfix2(20);
     58         for (j = 0; j < input.length(); j++) {
     59             ch = input.charAt(j);
     60             // 如果字符为整数,则进行类型强制转换,并压入栈中
     61             if (ch >= '0' && ch <= '9') {
     62                 theStackfix2.push((int) (ch - '0'));
     63             } else {
     64                 // 测试用例最最关键的位置,考虑计算过程中的操作数的位置
     65                 // 先弹出栈的元素是第二个操作数,后弹出栈的是第一个操作数
     66                 num2 = theStackfix2.pop();
     67                 num1 = theStackfix2.pop();
     68                 switch (ch) {
     69                 case '+':
     70                     inresult = num1 + num2;
     71                     break;
     72                 case '-':
     73                     inresult = num1 - num2;
     74                     break;
     75                 case '*':
     76                     inresult = num1 * num2;
     77                     break;
     78                 case '/':
     79                     inresult = num1 / num2;
     80                     break;
     81                 default:
     82                     inresult = 0;
     83                     break;
     84                 }
     85                 theStackfix2.push(inresult);
     86             }
     87         }
     88         return theStackfix2.pop();
     89     }
     90 }
     91 
     92 public class PostfixValue {
     93 
     94     /**
     95      * @param args
     96      * @throws IOException
     97      */
     98     public static void main(String[] args) throws IOException {
     99 
    100         while (true) {
    101             System.out.println("Enter a Postfix:");
    102             System.out.flush();
    103             String input;
    104             int result;
    105             input = getString();
    106             Postfix parse = new Postfix(input);
    107             result = parse.doCalculate();
    108             System.out.println("Postfix求值的结果是:" + result);
    109         }
    110     }
    111 
    112     public static String getString() throws IOException {
    113         InputStreamReader isr = new InputStreamReader(System.in);
    114         BufferedReader bufr = new BufferedReader(isr);
    115         return bufr.readLine();
    116     }
    117 
    118 }
  • 相关阅读:
    CentOS7.2上安装Python3.6
    Ubuntu 18.04 安装配置 MySQL 5.7
    CentOS 使用 sudo 遇到 command not found 问题解决
    一个恼人的文件名问题
    CentOS7 安装配置备忘录
    Win7 + CentOS7 双系统
    C++ 精英化趋势
    CentOS7 安装配置 MySQL 5.7
    pip "Cannot uninstall 'six'. It is a distutils installed project..." 解决方法
    Linux 系统假死的解决方案
  • 原文地址:https://www.cnblogs.com/ysw-go/p/5374604.html
Copyright © 2011-2022 走看看