一、问题概述:

人们经常书写的数学表达式属于中缀表达式,今天要解决的是,后缀表达式的求解问题。

如下图分别为举例的中缀表达式和后缀表达式:

二、解决思路

我们用栈存储后缀表达式中的数据部分,当遇到操作符时就取出栈中的栈顶两个元素,检测操作符的类型,并进行相应的计算(这里要注意的是,对于除法运算,栈顶的两个元素的位置得区分)。

如下所示:

三、实现代码

//Expression.h

#pragma once
#include<stack>
#include<assert.h>enum Type
{OP_SYMBOL,OP_NUM,ADD,SUB,MUL,DIV
};struct Cell
{Type _type;int _value;
};void FunTest()
{Cell RPN[] = {{OP_NUM,12},{OP_NUM,3},{OP_NUM,4},{OP_SYMBOL,ADD},{OP_SYMBOL,MUL},{OP_NUM,6},{OP_SYMBOL,SUB},{OP_NUM,8},{OP_NUM,2},{OP_SYMBOL,DIV},{OP_SYMBOL,ADD}};stack<int> s;for(size_t i = 0; i < sizeof(RPN)/sizeof(RPN[0]);++i){if(RPN[i]._type == OP_NUM){s.push(RPN[i]._value);}else if(RPN[i]._type == OP_SYMBOL){int second = s.top();s.pop();int first = s.top();s.pop();switch(RPN[i]._value){case ADD:s.push(first+second);break;case SUB:s.push(first-second);break;case MUL:s.push(first*second);break;case DIV:s.push(first/second);break;default:assert(false);}}else{assert(false);}}cout<<s.top()<<endl;
}

//Expression.cpp

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#include"Expression.h"int main()
{FunTest();return 0;
}

后缀表达式就说到这里喽,有需要改进得地方,欢迎提出宝贵意见哦。

用栈实现后缀表达式求解问题相关推荐

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

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

  2. 有趣的数据结构算法10——后缀表达式(PRN)介绍及利用栈计算后缀表达式的结果

    有趣的数据结构算法10--后缀表达式(PRN)介绍及利用栈计算后缀表达式的结果 解题思路 实现代码 GITHUB下载连接 在前一天已经利用栈完成2进制到8进制的转换.但是栈的应用方面还有很多,本次我将 ...

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

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

  4. 表达式计算:后缀表达式求解 以及 中缀表达式转换为后缀表达式

    后缀表达式 后缀表达式格式: 不包含括号,运算符放在两个运算对象的后面. 后缀表达式运算规则: (从左向右) 所有计算均按运算符出现的顺序(不再考虑乘除优先于加减这种运算符的优先规则),严格从左向右进 ...

  5. 数据结构——用栈实现后缀表达式的计算

    后缀表达式计算: " A B - C D E / F - * + G + " 在运算过程中,首先创建一个 "操作数栈" . 1.从左向右扫描,扫描到一个操作数, ...

  6. 数据结构(3) 第三天 栈的应用:就近匹配/中缀表达式转后缀表达式 、树/二叉树的概念、二叉树的递归与非递归遍历(DLR LDR LRD)、递归求叶子节点数目/二叉树高度/二叉树拷贝和释放...

    01 上节课回顾 受限的线性表 栈和队列的链式存储其实就是链表 但是不能任意操作 所以叫受限的线性表 02 栈的应用_就近匹配 案例1就近匹配: #include <stdio.h> in ...

  7. 前、中、后缀表达式概述及转换+栈的计算器原理及代码分析(含完整源码)

    目录: 1.前中后缀表达式的概述 2.中序表达式转前后缀表达式 3.运用栈的后缀表达式实现计算器原理步骤 4.代码实现和分析 1.前中后缀表达式的概述及相互转换 前缀表达式:运算符位于操作数之前. 中 ...

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

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

  9. java简易计算机(用栈实现中缀转后缀,计算后缀表达式)

    这学期java课的一个小作业,用java编一个小计算器. 个人认为要点在于: 1.计算机的布局,即按钮和输出框的布局需要知道怎么操作,按钮的大小和字体的大小颜色.不同布局中按钮的改变大小等等 2.用栈 ...

最新文章

  1. 一种用户体验-显示对话框时灰化你的主窗体
  2. Kibana停止kibana的方法命令:找到5601端口对应的进程ID 把此进程进行kill即可
  3. matlab生成exe失败,求助,m文件生成exe遇到的错误
  4. 谷歌游览器插件html5,谷歌丢弃浏览器插件,全面开发html5
  5. linux测试硬盘的ipos,Linux/Unix平台data-recovery常用的工具
  6. 解析时分秒_部编版三年级上册语文生字表、识字表+生字解析(拼音+偏旁+结构+组词+造句)...
  7. C#中的委托与事件 笔记
  8. 5月第3周回顾:08软考举行 中国遭大范围SQL注入***
  9. Oracle 动态视图3 V$SESSION
  10. Win10桌面上:[ 我的电脑 ] 图标不见了
  11. Aho-Corasick懵逼学习
  12. gke google_使用ExternalDNS扩展GKE
  13. 【实验分享】通过Console口登录到Cisco设备
  14. Android自定义-滑动缩放渐变填充曲线折线图表
  15. 【Linux】工具(3)——gcc/g++
  16. python 来实现文件复制操作
  17. MYSQL8.0修改密码(仅限于修改密码)
  18. Myeclispe 2016 stable1.0版 完美破解
  19. 微信小程序图片宽度100%,高度自适应
  20. centOS7服务管理与启动流程

热门文章

  1. 前端 ---jQuery的补充
  2. ARC_xp_20160530
  3. 使用Beautifulsoup爬取药智网数据
  4. 在数据库中outlet、code、outline为联合组件。hibarnate插入可如此插入
  5. html 输入框从左上角,在输入框的左上角,使文本开始_input_开发99编程知识库
  6. java memcache 队列_基于memcache的java分布式队列实现。
  7. java中u怎么用_Java中interrupt的使用
  8. python计算汽车的平均油耗_用python对汽车油耗进行数据分析
  9. ccs安装多版本编译器离线_大数据分析:学习工具JDK,在线安装指南
  10. php源码仿三一重工,织梦仿三一重工业大学气企业网站php源码