`
爱宝贝丶
  • 浏览: 7432 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

后缀表达式的计算

阅读更多

       在实际应用中,由于中缀表达式计算的复杂度较大,并且计算式占用的空间较多,而后缀表达式在理论上可以计算任意复杂度的表达式,并且利用栈的特点每次只需要对栈顶元素进行操作即可,因而将中缀表达式转换为后缀表达式之后将会对计算效率大大提高。

       后缀表达式的计算规则为:当遇到操作数(数字)时就将其入栈,当遇到操作符时就取出栈顶的两个元素,根据当前操作符进行计算,将计算结果再压入栈顶。如果表达式是规整的表达式,在整个表达式扫描完成之后栈顶将只有一个数字,该数据即为计算结果。

       具体的代码如下:

import java.util.Stack;

public class LastExpression {
  private static Stack<Float> stack = new Stack<>();
  public static Float compute(String str) {
    transfer(str);
    return stack.pop();
  }

  private static void transfer(String str) {
    for (int i = 0; i < str.length(); i++) {
      switch (str.charAt(i)) {
        case ' ':
          continue;
        case '+':
          plus();
          break;
        case '-':
          sub();
          break;
        case '*':
          mul();
          break;
        case '/':
          div();
          break;
        default:
          i = num(str, i);
      }
    }
  }

  private static int num(String str, int index) {
    StringBuilder numStr = new StringBuilder("");
    Character ch = null;
    while (index < str.length() && ((ch = str.charAt(index)) <= '9' && ch >= '0')) {
      numStr.append(ch);
      index++;
    }
    stack.push(Float.parseFloat(numStr.toString()));
    return index - 1;
  }

  private static void plus() {
    Float a = stack.pop();
    Float b = stack.pop();
    stack.push(a + b);
  }

  private static void sub() {
    Float a = stack.pop();
    Float b = stack.pop();
    stack.push(a - b);
  }

  private static void mul() {
    Float a = stack.pop();
    Float b = stack.pop();
    stack.push(a * b);
  }

  private static void div() {
    Float a = stack.pop();
    Float b = stack.pop();
    stack.push(a / b);
  }
}
分享到:
评论

相关推荐

    利用后缀表达式计算中缀表达式的值.数据结构

    将上述概要内容综合起来,我们能够清晰地看到,这一利用后缀表达式计算中缀表达式的值的程序,不仅是一个功能强大的计算器,更是展示了数据结构、C语言编程、MFC界面设计以及错误处理等多个方面知识的综合运用实例。...

    后缀表达式计算

    后缀表达式,又称逆波兰表示法,是数学表达式的一种表示形式,它在计算领域具有重要的应用价值,尤其在算法设计和计算机科学中。后缀表达式的主要优点在于其简洁性和易于用栈来实现计算,这使得它成为解决计算问题的...

    中缀表达式转后缀表达式计算

    后缀表达式计算过程的规则非常简单:从左到右依次扫描,当读到运算符时,就对该运算符前面的两个操作数执行相应的运算,直至得到表达式的结果。 编写程序模拟编译系统计算中缀表达式的过程,大体分为两步: (1) 将...

    用堆栈实现中缀转后缀表达式计算课程设计

    2. **后缀表达式计算**: - 初始化一个空栈,用于存放计算过程中的中间结果。 - 从左到右遍历后缀表达式。 - 遇到数字,将其压入栈。 - 遇到运算符,弹出栈顶的两个数进行运算,将结果压回栈中。 - 继续此过程...

    后缀表达式计算求值实例

    这个实例对于理解后缀表达式计算求值的算法和实现方法非常有帮助。通过阅读和分析源代码,可以深入理解如何将算法转化为实际的C++代码,以及如何在VS环境中构建和调试程序。对于学习编译原理、数据结构、算法设计和...

    四川大学计算机学院-数据结构与算法分析高分实验报告-利用后缀表达式计算中缀表达式的值.rar

    在本实验报告中,我们将深入探讨如何利用后缀表达式(又称逆波兰表示法)来计算中缀表达式的值,这是计算机科学中的一个重要概念,特别是在编译原理、解析器设计和计算效率优化方面。 后缀表达式是一种没有括号和...

    表达式求值(根据原表达式得到后缀表达式计算)

    表达式求值(根据原表达式得到后缀表达式计算) 表达式中只限输入整数

    houzhui_用栈实现后缀表达式计算_

    编程实现后缀表达式的计算。(40’) (注: 运算数和运算符之间以空格分隔,表达式结尾为EOF)输入描述第一行后缀算数表达式,数字均为正整数,运算符只...如果合法,输出后缀表达式计算结果。(注: 不要出现拼写错误)

    数据结构中缀表达式变后缀表达式计算

    程序用了两个栈实现表达式的计算 根绝算符优先级进行pop push 的到后缀表达式 并输出 然后再根绝所得的后缀表达式计算!

    表达式的计算(中缀转后缀再计算)

    文件名 `infix2postfix.cpp` 和 `postfixEval.cpp` 分别对应于中缀转后缀和后缀表达式计算的函数实现。`main.cpp` 文件可能包含测试这些功能的主程序,而 `infix2postfix.h` 和 `postfixEval.h` 是对应的头文件,...

    后缀表达式计算器代码

    1. **栈**:栈是一种具有后进先出(LIFO)特性的数据结构,它在后缀表达式计算中扮演重要角色。在这个项目中,栈用来存储待处理的操作数和临时结果。当我们遇到一个操作数时,将其压入栈;遇到运算符时,从栈顶弹出...

    C语言 后缀表达式计算.doc

    "C语言后缀表达式计算" 本资源是关于 C 语言后缀表达式计算的详细知识点,涉及到算法设计、数据结构、表达式计算等方面的内容。 算法设计 在计算后缀表达式时,可以使用两种方法:一种是将中缀表达式转换为后缀...

    java堆栈的应用--中缀表达式转换成后缀表达式和计算

    在项目“101544246张绪鹏--中缀转换为后缀表达式及其计算”中,开发者可能实现了一个完整的Java程序,该程序能够读取用户输入的中缀表达式,将其转换为后缀表达式,并根据后缀表达式计算出结果。程序可能包含以下几...

    C语言后缀表达式计算.doc

    C 语言后缀表达式计算 C 语言后缀表达式计算是计算机科学中的一种算法,用于计算后缀表达式的值。后缀表达式是一种特殊的表达式,所有操作符都写在操作数的后面。例如,中缀表达式「a+b*c」对应的后缀表达式为「a b...

    c++ 计算表达式结果(二叉树、后缀表达式)

    它可能包括了中缀表达式转后缀表达式、后缀表达式计算结果的功能,并且可能提供了示例输入和预期输出,用于验证算法的正确性。 总的来说,通过C++处理表达式,我们可以利用二叉树和后缀表达式的方法,有效地解决...

    C语言后缀表达式计算资料.pdf

    C语言后缀表达式计算资料.pdf 本资源提供了两种方式来实现表达式自动计算:第一种方法是将中缀表达式转化为后缀表达式,然后对后缀表达式进行计算;第二种方法是直接对中缀表达式进行计算。文章详细介绍了这两种...

    利用堆栈实现波兰表达式实现后缀表达式计算

    C++语言,利用堆栈实现波兰表达式实现后缀表达式计算。

    利用后缀表达式计算中缀表达式的值

    1)利用栈将中缀表示转换成后缀表示,从主键盘上输入一个中缀表达式(以‘=’结束),将其转换成后缀表达式...(2)应用后缀表示计算表达式的值,求从一个输入文件中输入的后缀表达式的值,将表达式的值在屏幕上显示出来

    中缀表达式转化为后缀表达式算法及后缀表达式计算算法.doc.doc

    中缀表达式转化为后缀表达式算法及后缀表达式计算算法.doc.doc

Global site tag (gtag.js) - Google Analytics