一、思路

给出一个后缀表达式(以字符串数组的形式,每一项要么是一个操作数字符串,要么是一个运算符),计算过程中要将操作数从string形式转换为int形式,在计算表达式运算结果时,需要设置一个栈 num 保存操作数,计算步骤如下:

1)若当前项是操作数,则将该操作数压入num栈中;

2)若当前项是运算符,则从操作数栈中出栈两个操作数(栈顶的数作为第二个操作数,次栈顶的数作为第一个操作数),计算两个操作数进行运算的结果,然后将结果压入操作数栈num中。

遍历完后缀表达式数组后,操作数栈num中必定只剩下一个数(表达式正确的情况下),这个数就是表达式的运算结果。

二、代码

int solve(vector<string> postexp;) {//postexp是后缀表达式,每一项是一个操作数串或者运算符stack<int> num;  //操作数栈int len = postexp.size();int i = 0;while(i < len){  //对后缀表达式求值if(postexp[i] != "+" && postexp[i] != "-" && postexp[i] != "*"){int tmp = atoi(postexp[i].c_str()) ; //操作数(string类型转换为int型)num.push(tmp); //将操作数压入栈中i++;}else{  //每遇到一个操作符,就将两个操作数出栈,运算完后将结果压栈int opnum1 = num.top(); num.pop();int opnum2 = num.top();num.pop();int res = 0;  //运算结果char op= postexp[i][0]; //字符串的第一个字符(实际上也只有一个字符)switch(op){ //注意两个操作数的顺序,栈顶元素作为第二个操作数case '+':res = opnum2 + opnum1;break;case '-':res = opnum2 - opnum1;break;case '*':res = opnum2 * opnum1;break;case '/':  res = opnum2 / opnum1;break;default:break;}num.push(res);i++;}}return num.top();  //最后栈中必定只剩下一个数,就是运算结果}

后缀表达式求值-C++实现相关推荐

  1. python前缀表达式求值_python数据结构与算法 11 后缀表达式求值

    从本节开始,删除原版的英文,直接发译后的文稿. 后缀表达式求值 栈的最一个应用例子,计算一个后缀表达式的值.这个例子中仍然用栈的数据结构.不过,当扫描表达式的时候,这次是操作数压栈等待,不是转换算法中 ...

  2. 基于栈的后缀表达式求值(洛谷P1449题题解,Java语言描述)

    题目要求 P1449题目链接 分析 给出后缀表达式求值,就相当于没了括号,而且很直接. 我们需要使用栈结构来完成任务. Java原装的栈使用了很多synchronized,导致性能不佳,但我们也就将就 ...

  3. 使用栈解决的一类经典问题:表达式转换及求值;中缀表达式;前缀表达式,后缀表达式,中缀转前缀;中缀转后缀;后缀表达式求值;波兰式,逆波兰式

    文章目录 背景知识 表达式转换问题(考研经典) 一:手工转换 (1)中缀转前缀和中缀转后缀 (2)前缀转中缀和后缀转中缀 二:用栈实现表达式转换 (1)中缀转后缀 (2)中缀转前缀 表达式计算问题(使 ...

  4. 栈应用:后缀表达式求值

    在上一篇博客 栈应用:中缀表达式转后缀表达式 中我们知道如何通过栈将中缀表达式转为后缀表达式,这次我们继续用栈 来实现后缀表达式求值,结合上一篇博客. 上一篇博客中是用c语言实现的,由于c语言中不支持 ...

  5. php表达式求值,PHP实现基于栈的后缀表达式求值功能

    本文实例讲述了PHP实现基于栈的后缀表达式求值功能.分享给大家供大家参考,具体如下: 后缀表达式概述 后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左 ...

  6. java求值不用后缀表达式_数据结构之后缀表达式求值(java实现)

    数据结构之后缀表达式求值(java实现) 前记 ​ 今天在刷leet code的时候刷到了一道题,后缀表达式(逆波兰表达式)求值,我花了一会儿写了一下它的解法.但是今天我不谈什么是后缀表达式,有兴趣的 ...

  7. 后缀表达式求值和转换(C++)

    中缀转后缀 #include<stdio.h> #include<stack> using namespace std; stack<int> s; int com ...

  8. C语言栈的应用——后缀表达式求值

    算法思路 ​ 上次已经完成了由中缀表达式转后缀表达式的算法,而后缀表达式的优点就是可以从左至右直接读取,没有算数优先级的考量,所以直接进行运算即可. ​ 该算法需要使用一个栈用来保存操作数,在读取到数 ...

  9. 表达式求值(中缀转后缀及后缀表达式求值)

    .中缀表达式转后缀表达式: 中缀表达式转后缀表达式遵循以下原则: 1.遇到操作数,直接输出: 2.栈为空时,遇到运算符,入栈: 3.遇到左括号,将其入栈: 4.遇到右括号,执行出栈操作,并将出栈的元素 ...

最新文章

  1. Sql存储过程加密和解密
  2. 简明python教程txt-Python:将 list 写入一个 txt 文件四种方法
  3. 【译】使用这些 CSS 属性选择器来提高前端开发效率!
  4. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 linker 中的 dlopen 函数地址 并 通过 远程调用 执行该函数 )
  5. python-常用函数模块学习-subprocess
  6. Python中defaultdict函数的使用方法
  7. centos7源代码安装mysql5.7_CentOS7源码编译安装MySQL5.7.11
  8. SQL Sever中SQL语句语法,适合初学者使用
  9. 3-4:类与对象中篇——默认成员函数之拷贝构造函数
  10. php嵌入html代码的三种方法
  11. SpringBoot +spring security 与CSRF有关的几个 问题
  12. 010 异步处理Rest服务
  13. 数据库读写分离下的数据同步解决方案
  14. 人类会被人工智能打败吗?
  15. 黑客租用阿里云平台攻击淘宝,9900万账户信息遭窃取
  16. 04 Python | 写入古诗并复制到新文档
  17. fcpx插件:Stupid Raisins Flow Pop(48个平滑和无缝过渡)
  18. 如何制作动态海报?教你一招在线合成GIF海报
  19. 马哥教育N63013-第一周作业
  20. 3.计算机的应用领域及其发展趋势是什么,计算机应用的现状及其发展趋势

热门文章

  1. PredictionIO
  2. 【使用 node 版本切换工具 nvm 切换 node.js 版本】
  3. leetcode 383赎金信
  4. 删除Github仓库中的指定的文件或文件夹
  5. 美国最大运营商裁员4.4万人,作为普通的程序员,我们该如何面对互联网裁员浪潮?
  6. 《失控》--- 新生物文明和蜂群思维
  7. mac下配置php环境变量配置,怎么给mac电脑添加环境变量
  8. 番茄花园ROM下载地址
  9. 最新版迅雷定时器下载2009-7-19
  10. 使用SqlDataSource调用带参数存储过程(获取不到数据?)