用栈实现后缀表达式求解问题

一、问题概述:

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

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



二、解决思路

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

如下所示:



三、实现代码


//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;
}


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SetConsoleCursorPosition光标的位置控制

SetConsoleCursorPosition是一个计算机函数&#xff0c;如果用户定义了 COORD pos&#xff0c;那么pos其实是一个结构体变量&#xff0c;其中X和Y是它的成员&#xff0c; 通过修改pos.X和pos.Y的值就可以实现光标的位置控制。 复制粘贴运行一下&#xff0c;你就明白代码什么意…

用栈和递归求解迷宫问题

一、问题概述 小时候&#xff0c;我们都玩过走迷宫的游戏吧。看一下这个图例&#xff1a; 遇到这种问题时&#xff0c;我们第一反应都会先找到迷宫的入口点&#xff0c;然后对上下左右四个方向进行寻迹&#xff0c; 检测当前位置是否是通路&#xff0c;是否可以通过&#xff0…

exit(0) return区别

1. return是返回函数调用&#xff0c;如果返回的是main函数&#xff0c;则为退出程序。 exit是在调用处强行退出程序&#xff0c;运行一次程序就结束&#xff0c; 无论写在那里&#xff0c;都是程序推出&#xff0c;括号里的数字0,1,-1会被写入环境变量ERRORLEVEL&#xff0c…

electron 5.0.3版本 改动的地方

BrowserWindow.getFocusedWindow 1. BrowserWindow.getFocusedWindow getFocusedWindow 已经不是一个方法了&#xff0c; 这个简单的问题解决了半天&#xff0c;因为我看文档上 还是当一个方法来调用&#xff0c; 文档没有正确更新&#xff0c;实际上已经变成了一个属性&#…

【c语言】棋盘游戏--三子棋

一、问题概述 大家都玩过棋盘游戏吧&#xff0c;像五子棋一样&#xff0c;玩家或者是电脑一人下一次&#xff0c;当玩家或者是电脑的某一方先将各自的五个棋子下成一条线时&#xff0c;谁就赢&#xff0c;棋盘游戏就会结束。 当然&#xff0c;我今天要介绍的是三子棋&#xff…

【转】浅析task_struct结构体

https://blog.csdn.net/peiyao456/article/details/54407343

electron 主进程与渲染进程 渲染进程与渲染进程 之间的通信

主进程与渲染进程之间的通信 这是渲染进程 // 渲染进程执行主进程里面的方法&#xff0c;主进程给渲染进程反馈处理结果 。 var sendreplayDomdocument.querySelector(#sendreplay); sendreplayDom.onclickfunction(){// alert(1213)//渲染进程给主进程广播数据ipcRenderer.se…

centos升级之gcc 升级 gcc-7.3.0安装

更新于&#xff1a;2018_7_28 安装时间非常非常久&#xff0c;我最快一次40分钟&#xff0c;最长一次两个小时 cd / wget ftp.gnu.org/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz tar -zxvf gcc-7.3.0.tar.gz cd gcc-7.3.0 ./contrib/download_prerequisites mkdir build cd …

[数据结构]用插入排序和选择排序的思想实现优先级队列

一、问题概述 优先级队列的定义&#xff1a; 优先级队列不同于普通的队列&#xff0c;普通的队列具有先进先出的原则&#xff0c;而优先级队列是选择优先级最高的先出队。那么&#xff0c;如何模拟实现优先级队列呢&#xff1f;在这里&#xff0c;我们将较大的值作为优先级较高…

node.js https 模块设置请求头等信息

// https://www.iqiyi.com/v_19rs789v28.html var fs require(fs); var https require(https); var option{rejectUnauthorized: false,hostname:www.iqiyi.com,path:/,headers:{Accept:*/*,Accept-Encoding:utf-8, //这里设置返回的编码方式 设置其他的会是乱码Accept-Lang…

centos升级之vim vim8.0安装

YCM安装攻略&#xff1a;https://blog.csdn.net/csdn_kou/article/details/81213935 卸载旧的vim yum remove vim* -y 一、源码编译安装vim8.0 配置epel源 yum install epel-release 安装python3,以及vim8.0编译环境 yum install -y gcc python34 python34-devel ncurses…

[数据结构]求解迷宫最短路径问题

一、问题概述 之前&#xff0c;我们了解了如何实现迷宫问题&#xff08;对于迷宫只有一个出口可以通的情况&#xff09;&#xff0c;事实上我们的迷宫有多个出口&#xff0c;对于每条路径来说&#xff0c;有长有短&#xff0c;所以在这里&#xff0c;我们讨论一下迷宫的最短路…

centos升级之内核kernel

yum update kernel yum update && yum upgrade # rpm –import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org # rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm # yum –disablerepo”*” –enablerepo”elrepo-kernel” list ava…

[STL]List的实现

STL&#xff08;Standard template Library&#xff09;:c的标准模板库 STL是算法和数据结构的软件框架&#xff0c;它包含了六大组件&#xff1a;算法、迭代器、容器、仿函数、配接器、空间配置器。 迭代器&#xff1a;我们可以把迭代器相当于智能指针&#xff0c;&#xff0…

python 获取windows上 网络连接信息 ip dhcp dns gateway

import socket import os import re def get_host_ip():"""查询本机ip地址:return:"""try:s socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.connect((8.8.8.8,80))# 能提取出本机ip 通过本机ip提取出其他设置ip s.getsockname()[0]# ip地…

vc++6.0的应用程序打不开肿么办

今天早起&#xff0c;有同学问到我关于vc6.0的安装过程中遇到的问题&#xff0c;我听了之后想想还是写篇博客给大家看一下吧。因为我之前也遇到过类似的问题。当时也是挺着急的。 大家遇到的问题估计就是这样吧~~&#xff08;下载后打不开&#xff09; 请看-->解决步骤&…

【数据结构】广义表

一、问题概述 广义表是非线性的数据结构&#xff0c;是由若干个元素组合而成的&#xff0c;广义表中可以有子表&#xff0c;类似这样的&#xff1a; 我们以C(a,b,(c,d))为例&#xff0c;将它定义为这样的数据结构&#xff1a; 我们会给定字符串的形式&#xff0c;如&#xff…

centos升级之共享文件夹

vmware-hgfsclient vmhgfs-fuse .host:/share /mnt/hgfs 如果不行的话 cd /mnt mkdir hgfs 把上面的在执行一次