博客
关于我
后缀表达式求值
阅读量: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/

    你可能感兴趣的文章
    PgSQL · 特性分析 · PG主备流复制机制
    查看>>
    PGSQL主键序列
    查看>>
    PGSQL安装PostGIS扩展模块
    查看>>
    pg数据库中两个字段相除
    查看>>
    PhalApi:[1.23] 请求和响应:GET和POST两者皆可得及超越JSON格式返回
    查看>>
    Phalcon环境搭建与项目开发
    查看>>
    Phantom.js维护者退出,项目的未来成疑
    查看>>
    Pharmaceutical的同学们都看过来,关于补码运算的复习相关内容
    查看>>
    Phoenix 查看表信息及修改元数据
    查看>>
    phoenix_执行sql报错_Error: ERROR 504 (42703): Undefined column. columnName=(state=4270_大数据工作笔记0181
    查看>>
    phoenix启动失败_The history file `/root/.sqlline/history` may be an older history---记录024_大数据工作笔记0184
    查看>>
    Phoenix基础命令_视图映射和表映射_数字存储问题---大数据之Hbase工作笔记0036
    查看>>
    phoenix无法连接hbase shell创建表失败_报错_PleaseHoldException: Master is initializing---记录020_大数据工作笔记0180
    查看>>
    Phoenix简介_安装部署_以及连接使用---大数据之Hbase工作笔记0035
    查看>>
    phoenix连接hbase报错Can not resolve hadoop120, please check your network_记录026---大数据工作笔记0187
    查看>>
    Photoshop工作笔记001---Photoshop常用快捷键总结
    查看>>
    Reids配置文件redis.conf中文详解
    查看>>
    Photoshop脚本入门
    查看>>
    PHP
    查看>>
    Regular Expression Notes
    查看>>