返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++实现逆波兰表达式的例题详解
  • 750
分享到

C++实现逆波兰表达式的例题详解

C++实现逆波兰表达式C++逆波兰表达式 2022-12-21 09:12:24 750人浏览 薄情痞子
摘要

目录1. 题目描述2. 解题思路3. 动图演示4. 代码实现1. 题目描述 2. 解题思路 逆波兰表达式由波兰的逻辑学家卢卡西维兹提出,它的特点是:没有括号,运算符总是放在和它相关

1. 题目描述

2. 解题思路

逆波兰表达式由波兰的逻辑学家卢卡西维兹提出,它的特点是:没有括号,运算符总是放在和它相关的操作数之后。因此,逆波兰表达式也称后缀表达式,它严格遵循「从左到右」的运算。

在我们平时生活中,使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 )

该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * )

计算逆波兰表达式的值时,使用一个栈存储操作数,从左到右遍历逆波兰表达式,进行如下操作:

  • 从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则将数字入栈;
  • 如果不是数字,该字符则是运算符,如果遇到运算符,则将栈里面的两个操作数出栈,其中先出栈的是右操作数,后出栈的是左操作数, 使用运算符对两个操作数进行运算,将运算得到的新操作数入栈。

整个逆波兰表达式遍历完毕之后,栈内只有一个元素,该元素即为逆波兰表达式的值。

3. 动图演示

来看个动图

4. 代码实现

有一点需要注意,num 1 和 num2 进行运算的时候,num1 是右操作数,num2 是左操作数,别写反了!!!

代码示例

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<long long> st;
        for (auto& str : tokens) {
            if (str == "+" || str == "-" || str == "*" || str == "/") {
                auto num1 = st.top();
                st.pop();
                auto num2 = st.top();
                st.pop();

                if (str == "+") {
                    st.push(num2 + num1);
                }
                else if (str == "-") {
                    st.push(num2 - num1);
                }
                else if (str == "*") {
                    st.push(num2 * num1);
                }
                else if (str == "/") {
                    st.push(num2 / num1);
                }
            }
            else {
                st.push(stoi(str)); // 如果是操作数就入栈,因为这是字符,所以要转成数字
            }
        }
        return st.top();
    }
};

到此这篇关于c++实现逆波兰表达式的例题详解的文章就介绍到这了,更多相关C++逆波兰表达式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++实现逆波兰表达式的例题详解

本文链接: https://lsjlt.com/news/175399.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++实现逆波兰表达式的例题详解
    目录1. 题目描述2. 解题思路3. 动图演示4. 代码实现1. 题目描述 2. 解题思路 逆波兰表达式由波兰的逻辑学家卢卡西维兹提出,它的特点是:没有括号,运算符总是放在和它相关...
    99+
    2022-12-21
    C++实现逆波兰表达式 C++ 逆波兰表达式
  • C++实现LeetCode(150.计算逆波兰表达式)
    [LeetCode] 150.Evaluate Reverse Polish Notation 计算逆波兰表达式 Evaluate the value of an arithmeti...
    99+
    2024-04-02
  • C语言实现逆波兰式实例
    复制代码 代码如下:#include<stdio.h>#include<string.h> typedef struct{char s[20][20];int...
    99+
    2022-11-15
    C语言 逆波兰式
  • c语言逆波兰表达式求值的方法
    本篇内容主要讲解“c语言逆波兰表达式求值的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“c语言逆波兰表达式求值的方法”吧!题目根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *...
    99+
    2023-06-19
  • Java实现简易计算器(逆波兰表达式)
    本文实例为大家分享了Java实现简易计算器的具体代码,供大家参考,具体内容如下 程序的运行环境为Windows10 ,编译环境为IDEA。 计算器有以下功能和要求:能够计算复杂表达式...
    99+
    2024-04-02
  • C++栈实现逆波兰式的应用
    目录一.定义二.逆波兰式的意义三.逆波兰式的实现1.方法2.代码实现一.定义 逆波兰式,又称后缀表达式,指的是操作符在其所控制的操作数后面的表达式。 举个例子,1 + 2 * 3 -...
    99+
    2024-04-02
  • 逆波兰表达式如何在Java项目中实现
    本篇文章给大家分享的是有关逆波兰表达式如何在Java项目中实现,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。逆波兰表达式定义:传统的四则运算被称作是中缀表达式,即运算符实在两个...
    99+
    2023-05-31
    java 逆波兰表达式 ava
  • C++实例详解lambda表达式的使用
    目录lambda表达式1、lambda表达式语法2、lambda应用3、lambda表达式的应用实践1、计算器案例2、智能指针案例3、优先级队列lambda表达式 C++11 函数对...
    99+
    2024-04-02
  • C++实现中缀表达式转化为后缀表达式详解
    目录1.题目描述2.输入输出3.解题思路4.样例解析 5.代码实现5.1.优先级确认5.2.转换函数1.题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运...
    99+
    2024-04-02
  • Struts2 OGNL表达式实例详解
    Object Graph Navigation Language:对象图导航语言,就是用点来访问成员变量<s:property value="cat.name"/> ...
    99+
    2023-05-31
    struts ognl og
  • Oracle 正则表达式实例详解
    Oracle 正则表达式实例详解 FORM开发中的按行拆分需求:拆分后的行要有规律,并按前后层次排序   需求分析如下:      现有行: 2 ...
    99+
    2024-04-02
  • jmeter正则表达式实例详解
    过年前产假归来,jmeter很多知识生疏了,这两天打开jmeter摸索了几下,老了记不住,还是准备弄个jmeter系列随笔吧。 言归正传,使用jmeter时经常有这样的情况:一个完整...
    99+
    2024-04-02
  • 详解Java中缀表达式的实现
    目录1.概念2.算法流程3 代码实现1.概念 什么是中缀表达式,什么是后缀表达式 从小学开始学习的四则运算,例如:3+(5*(2+3)+7) 类似这种表达式就是中缀表达式。中缀表达式...
    99+
    2024-04-02
  • C++ 正则表达式的应用详解
    目录一、为什么要学正则表达式C++string处理:二、正则程序库(regex)正则文法:正则库:匹配(Match)搜索(Search)替换(Replace)一、为什么要学正则表达式...
    99+
    2024-04-02
  • python if三元表达式实例用法详解
    1、说明 使用一行代码快速判断,更换复杂的多行if语句,使代码能够简单地维护。 if三元表达式的阅读方式有点不符合阅读习惯。从句子中间的if条件开始读,条件满足的话,得到左侧的值x,条件不满足的话,得到else下面的...
    99+
    2022-06-02
    python if 三元表达式
  • Java正则表达式之Pattern类实例详解
    目录前言Pattern 概述Pattern 匹配模式(Pattern flags)代码示例多行模式:Pattern.MULTILINE 示例忽略大小写:Pattern.CASE_IN...
    99+
    2024-04-02
  • C++中Lambda表达式的语法与实例
    目录概述 语法分析 捕获列表 关键字声明 mutableexception示例 捕获列表按值传递捕获列表按引用传递总结概述 C++ 11 中的 Lambda 表达式用于定义并创建匿...
    99+
    2024-04-02
  • C# 表达式目录树Expression的实现
    目录表达式目录树表达式目录树的拼装应用Linq to SQLExpressionVisitor表达式目录扩展通过表达式目录树实现表达式目录树 表达式目录树:语法树,或者说是一种数据结...
    99+
    2024-04-02
  • Python正则表达式中flags参数的实例详解
    目录flags参数忽略大小写多行模式匹配任何字符补充:正则表达式中的flags总结flags参数 re.I    IGNORECASE    ...
    99+
    2024-04-02
  • C语言递归实现字符串逆序的方式详解
    C语言实现字符串逆序,具体内容如下所示: 一、迭代的方式实现 贴上代码:迭代的方式实现 '//字符串逆序:不可用字符串操作函数' #include <stdio.h&g...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作