博客
关于我
后缀表达式求值
阅读量:108 次
发布时间:2019-02-26

本文共 1503 字,大约阅读时间需要 5 分钟。

逆波兰表示法(后缀表达式)是一种不需要括号的运算符序列表示方法,其优点是可以通过栈来高效地计算表达式的值。以下是解决这个问题的详细步骤:

思路

  • 栈的使用:逆波兰表达式的计算过程中,栈可以用来保存运算的中间结果。栈顶始终保存第二个操作数。
  • 遍历表达式:从左到右遍历每个token:
    • 如果是数字,直接将其转换为整数并压栈。
    • 如果是运算符,弹出栈顶的两个数字,执行运算,结果再压栈。
  • 运算顺序:运算符按照栈的顺序处理,先弹出第二个操作数,再弹出第一个操作数,进行运算后再压回栈。
  • 整数除法:确保除法运算只保留整数部分,无小数。
  • 实现代码

    #include 
    #include
    #include
    using namespace std;bool isNumber(string &str) { return !(str == "+" || str == "-" || str == "*" || str == "/");}int evalRPN(vector
    tokens) { stack
    res; int n = tokens.size(); for (int i = 0; i < n; ++i) { string token = tokens[i]; if (isNumber(token)) { res.push(atoi(token.c_str())); } else { int b = res.top(); res.pop(); int a = res.top(); res.pop(); char op = token[0]; switch(op) { case '+': res.push(a + b); break; case '-': res.push(a - b); break; case '*': res.push(a * b); break; case '/': res.push(a / b); break; } } } return res.top();}

    解释

  • isNumber函数:检查给定的字符串是否为数字(即不为运算符)。
  • evalRPN函数
    • 初始化一个栈res,用于保存中间结果。
    • 遍历每个token:
      • 如果是数字,转换为整数并压栈。
      • 如果是运算符,弹出两个栈顶元素,执行运算,结果再压栈。
  • 运算顺序:确保每次运算符处理时,正确弹出两个数字并按顺序计算。
  • 返回结果:栈最后只剩一个元素,即为表达式的结果。
  • 这种方法使用栈来模拟计算过程,时间复杂度为O(N),空间复杂度为O(N),适合处理逆波兰表达式的有效计算。

    转载地址:http://txhu.baihongyu.com/

    你可能感兴趣的文章
    Python - 正则表达式在括号之间获取数字
    查看>>
    Python - 正则表达式在括号之间获取数字
    查看>>
    Python - 类 __hash__ 方法和集合
    查看>>
    Python - 轻松将文本文件内容转换为字典值/键
    查看>>
    Python - 递归和列表
    查看>>
    Python 3 读取ini文件
    查看>>
    Python 3.0 使用 turtle.onclick
    查看>>
    Python 3.10 明年发布,看看都有哪些新特性?
    查看>>
    python 3.10上安装pyqt5
    查看>>
    Python 3.12 正式发布了!
    查看>>
    Python 3.2 中的蛮力脚本
    查看>>
    Python 3.4 多处理递归 Pool.map()
    查看>>
    Python 3.4:未知格式代码“x“
    查看>>
    Python 3.5、ldap3 和 modify_password()
    查看>>
    python 3.6.8 升级至3.9版本升级
    查看>>
    Python 3.9 到 Python 3.12 的发展历程与区别
    查看>>
    python 32位和64位的区别在哪
    查看>>
    Python 3:何时使用 dict,何时使用元组列表?
    查看>>
    Python 3d 绘图 - 轴居中
    查看>>
    python ==》 字典
    查看>>