当前位置: 首页 > news >正文

CSP初赛知识点讲解(六)

CSP初赛知识点讲解(六)

    • 运算表达式
      • 中缀变后缀
      • 表达式求值
      • 前缀表达式
    • 例题训练(八)

运算表达式

运算表达式有三种,前缀表达式,中缀表达式,后缀表达式,我们常用的是中缀表达式,即符号在数字之间, 运算符有优先级,人肉眼看着很方便,计算也比较方便。 但是脑补一下就会发现计算机计算这种表达式很麻烦, 不信你自己写个代码试试,计算机比较好识别的是后缀 表达式,即运算符号在数字后面,遇到符号就把最近的 两个数字计算,这样运算符之间没有优先级。

那么这里就涉及到两个知识

(1)中缀表达式转后缀表达式(反过来)

(2)后缀表达式计算

中缀变后缀

转换规则:

(1)遇到数字的时候直接存入一个新的数组

(2)遇到“(”的时候,无论此时栈顶元素为什么,都入栈

(3)遇到“)”的时候,无论此时栈顶元素为什么,都出栈。依 次把栈顶的元素存入新的数组,直到“(”出栈为止。“(”不放 入数组。

(4)遇到“*”和“/”的时候,如果栈为空或者栈顶元素是左括 号。入栈。如果优先级大于栈顶元素,入栈(乘除的优先级>加减), 如果优先级小于等于栈顶元素,出栈,直到栈顶元素优先级小于 当前字符优先级的时候。当前字符入栈。

(5)遇到“+”和“-”的时候。如果栈为空或者栈顶元素为左括 号,入栈,否则出栈(因为加减的优先级最低,无论栈顶是什么 运算符,优先级都大于等于他,都要出栈),当前字符入栈。

(6)字符串遍历完之后,一次出栈,并存储。

eg:9+(3-1)*3+10/2转为后缀表达式

  • 当前元素:9,直接添加到后缀表达式列表中。

  • 当前元素:+,压入栈中。

  • 当前元素:(,压入栈中。

  • 当前元素:3,直接添加到后缀表达式列表中。

  • 当前元素:-,压入栈中。

  • 当前元素:1,直接添加到后缀表达式列表中。

  • 当前元素:),将栈顶元素弹出并添加到后缀表达式列表中,直到遇到左括号"("。

  • 当前元素:*,压入栈中。

  • 当前元素:3,直接添加到后缀表达式列表中。

  • 当前元素:+,栈顶元素的优先级低于当前运算符,将当前运算符压入栈中。

  • 当前元素:10,直接添加到后缀表达式列表中。

  • 当前元素:/,栈顶元素的优先级低于当前运算符,将当前运算符压入栈中。

  • 当前元素:2,直接添加到后缀表达式列表中。

  • 遍历完毕,将栈中剩余的运算符依次弹出并添加到后缀表达式列表中。

所以最终后缀表达式:9 3 1 - 3 * + 10 2 / +

表达式求值

在中缀转后缀的基础上,我们对这个表达式进行求值

eg:9+(3-1)*3+10/2转为后缀表达式

  • 当前元素:9,压入栈中。

  • 当前元素:3,压入栈中。

  • 当前元素:1,压入栈中。

  • 当前元素:-,从栈中弹出3和1,计算3-1=2,将结果2压入栈中。

  • 当前元素:3,压入栈中。

  • 当前元素:,从栈中弹出2和3,计算23=6,将结果6压入栈中。

  • 当前元素:+,从栈中弹出9和6,计算9+6=15,将结果15压入栈中。

  • 当前元素:10,压入栈中。

  • 当前元素:2,压入栈中。

  • 当前元素:/,从栈中弹出10和2,计算10/2=5,将结果5压入栈中。

  • 当前元素:+,从栈中弹出15和5,计算15+5=20

    所以最终结果为20。

前缀表达式

后缀表达式是运算符在数字后面,那么前缀表达式就很明显是运算符在数字前面,实际上规则和中缀 转后缀差不多。 对于中缀表达式,先倒着读,按照类似中缀转后 缀的方式转换完之和再倒序。

eg:1+2*3+(4*5+6)*7 转换成前缀表达式,第一步先倒着读。

(1)读入‘7’,并送到输出,然后‘*’被读入并压入栈中。 接下来‘)’读入并送到栈中,此时状态如下:

栈:*) 输出:7

(2)接下来读入‘6’,并送到输出,然后读入‘+’此时状态 如下:

栈:* ) + 输出:7 6

(3)然后读入‘5’,并送到输出,然后继续读入‘*’,由于 ‘*’的优先级比‘+’高,所以直接加入栈中,再将‘4’送 到输出,因此状态如下:

栈:* ) + * 输出:7 6 5 4

(4)下一个读入的符号‘(’,由于规则,因此将符号栈中的 操作符依次出栈,然后读入‘4’,并在最后将右括号弹出:

栈:* 输出: 7 6 5 4 * +

(5)继续读入,此时读入‘+’,由优先级小于栈中‘*’的优 先级,因此依照规则,依次出栈,最后将‘+’入栈,接下来 读入‘3’:

栈:+ 输出:7 6 5 4 * + * 3

(6)往后读入的符号是‘*’,将‘*’入栈。然后将‘2’放 入输出:

栈:+ * 输出:7 6 5 4 * + * 3 2

(7)现在读入‘+’,由于符号栈中存在‘+’且它们的优先级 相同,根据规则,除非,优先级大于栈顶元素,否则不出栈, 依次栈中状态如下:

栈:+ + 输出:7 6 5 4 * + * 3 2 *

(8)下一个读入‘1’:

栈:+ + 输出:7 6 5 4 * + * 3 2 * 1

(9)现在输入为空,弹出所有栈中元素

栈:空 输出:7 6 5 4 * + * 3 2 * 1 + +

(10)最后翻转 输出:+ + 1 * 2 3 * + * 4 5 6 7

前缀表达式转换成中缀表达式也差不多。 第一步,先倒序,剩下的和后缀转中缀差不多

比如: + + 1 * 2 3 * + * 4 5 6 7

翻转:7 6 5 4 * + * 3 2 * 1 + +

遇到数字就放入栈内,遇到运算符就栈顶两个元素计算。

例题训练(八)

  • 表达式a*(b+c)*d的后缀形式是( )

    A:a b c d * + *

    B:a b c + * d *

    C:a * b c + * d

    D:b + c * a * d

​ 答案:B

​ 题解:可以直接模拟得到

  • 表达式a*d-b*c的前缀形式是( )

    A:a d * b c * -

    B:- * a d * b c

    C:a * d – b * c

    D:- * * a d b c

​ 答案:B

​ 题解:可以直接模拟得到

相关文章:

CSP初赛知识点讲解(六)

CSP初赛知识点讲解(六) 运算表达式中缀变后缀表达式求值前缀表达式 例题训练(八) 运算表达式 运算表达式有三种,前缀表达式,中缀表达式,后缀表达式,我们常用的是中缀表达式&#xf…...

linux rocky 9.2系统安装mysql-wsrep-8.4.2-26.20-linux-x86_64.tar.gz二进制包

1.环境准备, ①装好Rocky linux9.2系统,设置好IP nmcli con mod ens160 ipv4.addresses 192.168.0.106/24 nmcli con mod ens160 ipv4.gateway 192.168.0.2 nmcli con mod ens160 ipv4.dns 114.114.114.114 nmcli con up ens160 nmcli con mod ens…...

QT实现上传服务器功能

代码如下所示: void UploadZipFileToServer(const QString& strPath) {m_pFile new QFile(strPath);// 创建HTTP多部份请求QHttpMultiPart *multiPart new QHttpMultiPart(QHttpMultiPart::FormDataType);QHttpPart keyPart;keyPart.setHeader(QNetworkReques…...

元岳食堂采购供应链系统-智慧食堂数据化解决方案

随着社会的发展和科技的进步,在数字化浪潮的推动下,智慧食堂供应链系统逐渐成为食堂管理的重要工具。在此背景下,元岳食堂采购供应链系统应运而生,该系统通过其独特的数字化和自动化功能,能够对食堂的采购、储存、配送…...

基于Java+SpringBoot+Vue的影城管理系统

基于JavaSpringBootVue的影城管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 哈喽…...

自定义starter

依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 ht…...

Docker 入门全攻略:安装、操作与常用命令指南

目录 Docker 入门全攻略&#xff1a;安装、操作与常用命令指南 一、引言 二、Docker 下载与安装 2.1 Docker 的系统要求 2.2 安装步骤 ①对于 Windows 的安装指南 ②对于 macOS 的安装指南 ③对于 Linux 的安装指南 三、Docker 的基本概念 3.1 镜像&#xff08;Image…...

mstsc被卸载,远程桌面mstsc.exe重装

官网下载地址g卸载和重新安装远程桌面连接 | Microsoft Learn 卸载和重新安装远程桌面连接 | Microsoft Learn 下载地址 https://wwm.lanzouj.com/ioR4y26z7rle 下载后重新安装...

从根儿上学习spring 十一 之run方法启动第四段(5)

图15-AbstractAutowireCapableBeanFactory#doCreateBean方法 我们接着讲doCreateBean方法&#xff0c;之前对循环依赖做了些解释&#xff0c;我们接着往下看populateBean(beanName, mbd, instanceWrapper)方法 图15-572行 这行就是调用populateBean(beanName, mbd, instanceW…...

常见8种数据结构

常见的数据结构包括数组、链表、队列、栈、树、堆、哈希表和图&#xff0c;每种数据结构都有其特点&#xff0c;如下&#xff1a; 常见数据结构 1.数组2.链表3.队列4.栈5.树6.图7.哈希表8.堆 1.数组 特点&#xff1a; 固定大小的线性数据结构支持快速随机访问插入和删除效率…...

黑马Java零基础视频教程精华部分_11_面向对象进阶(3)_抽象类、接口、适配器

《黑马Java零基础视频教程精华部分》系列文章目录 黑马Java零基础视频教程精华部分_1_JDK、JRE、字面量、JAVA运算符 黑马Java零基础视频教程精华部分_2_顺序结构、分支结构、循环结构 黑马Java零基础视频教程精华部分_3_无限循环、跳转控制语句、数组、方法 黑马Java零基础视…...

Promethues Metrics

Metrics Metrics可分为三部分&#xff1a; HELP 描述metric作用TYPE metric类别 TYEP Counter 某个事件发生的次数数字只能增长 Total reuqests Total ExceptionsGauge 描述当前值可以上升或下降 CurrentCPU Utilization Available System Memory Number of concurren…...

公网IP与私网IP具体有哪些区别?

1.接入方式不同 公网IP以公网连接Internet上的非保留地址&#xff0c;私网IP则是局域网上的IP&#xff0c;通过NAT才能够与公网进行通信。 2.特点不同 公网IP由国际互联网络信息中心InterNIC负责,将IP地址分配给注册并向InterNIC提出申请的机构或组织。私网IP则是为节省可分配…...

LeetCode——3143. 正方形中的最多点数

通过万岁&#xff01;&#xff01;&#xff01; 题目&#xff1a;给你一个n*2的数组&#xff0c;然后第i行表示第i个点的坐标&#xff0c;然后还给你了一个字符串s&#xff0c;s[i]则表示第i个点的名称。然后让你找一个中心是&#xff08;0,0&#xff09;的正方形&#xff0c;…...

const重新赋值的问题

问: const haveNextPage false; // 默认没有下一页fetch(historyFullUrl).then(data > {haveNextPage data.data.has_more;这段代码有什么问题吗? 回答: 在你的代码中&#xff0c;有一个潜在的问题涉及到 haveNextPage 的赋值。你定义了 haveNextPage 作为一个常量&am…...

python开发上位机 - PyCharm环境搭建、安装PyQt5及工具

目录 简介&#xff1a; 一、安装PyCharm 1、下载 PyCharm 2、PyCharm安装 1&#xff09;配置安装目录 2&#xff09;安装选项 3、问题及解决方法 二、安装PyQt5 1、打开 Pycharm&#xff0c;新建 Project 2、安装 pyqt5 3、安装很慢怎么办&#xff1f; 4、安装 pyq…...

day02-安装虚拟机

1. 安装配置 前面一直下一步就OK 2. 虚拟机操作系统配置 语言 中文 软件安装&#xff1a; 最小安装&#xff0c;标准&#xff0c;调试工具&#xff0c;开发工具&#xff0c;系统工具&#xff0c;man手册 网络和主机名配置 主机名&#xff0c;自己起名字 网络配置 常规 &g…...

Qt:线程

一个Qt窗口生成后&#xff0c;为什么拖动窗口&#xff0c;窗口可以随着鼠标移动或放大缩小 因为对窗口操作后&#xff0c;都有对应的事件产生&#xff0c;Qt在其框架中对这些事件进行了默认处理 一个Qt程序默认只有一个线程&#xff0c;称为主线程&#xff08;也叫ui线程&#…...

VisionPro二次开发学习笔记11-使用 Caliper和Fixture定位Blob工具检测方块

该示例演示了如何使用卡尺工具和夹具工具来固定 Blob 工具。示例代码将检测图像上部区域中小方块的存在。当点击“运行”按钮时&#xff0c;将读取一张新图像。卡尺工具将被运行&#xff0c;卡尺工具的输出 Y 信息将传递给夹具工具。夹具工具使用来自卡尺工具的 Y 信息和新图像…...

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(五)卡尔曼滤波器一:认知卡尔曼滤波器;协方差矩阵与方差;

卡尔曼滤波器 为了研究卡尔曼&#xff0c;我阅读了大量博文。不敢说完全吃透&#xff0c;但是在做一件什么事&#xff0c;可以通过下面这文章来理解&#xff0c;我读了不下五遍。并整理标准重点&#xff0c;添加自己的一些见解。 自动驾驶传感器融合算法 - 自动驾驶汽车中的激…...

实战esp32智能门禁系统,快马平台生成完整应用代码助力项目落地

最近在做一个办公室智能门禁的小项目&#xff0c;用ESP32实现了完整的门禁控制功能。整个过程挺有意思的&#xff0c;特别是发现用InsCode(快马)平台可以快速生成项目代码框架&#xff0c;省去了很多重复工作。下面分享下具体实现思路和经验。 硬件选型与连接 ESP32作为主控板性…...

Socket.IO-Client-Swift终极指南:构建实时iOS应用的第一步

Socket.IO-Client-Swift终极指南&#xff1a;构建实时iOS应用的第一步 【免费下载链接】socket.io-client-swift 项目地址: https://gitcode.com/gh_mirrors/so/socket.io-client-swift Socket.IO-Client-Swift是一个强大的开源库&#xff0c;为iOS开发者提供了简单高效…...

OpenClaw搭建方法:2026年本地环境部署、配置大模型百炼APIKey、集成Skill、接入多平台

OpenClaw搭建方法&#xff1a;2026年本地环境部署、配置大模型百炼APIKey、集成Skill、接入多平台。OpenClaw&#xff08;原Clawdbot&#xff09;作为2026年主流的AI自动化助理平台&#xff0c;可通过阿里云轻量服务器实现724小时稳定运行&#xff0c;并快速接入钉钉&#xff0…...

突破网盘下载瓶颈:开源工具如何重塑你的文件获取体验

突破网盘下载瓶颈&#xff1a;开源工具如何重塑你的文件获取体验 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…...

QPdf:Qt生态下的PDF渲染技术深度解析与现代应用实践

QPdf&#xff1a;Qt生态下的PDF渲染技术深度解析与现代应用实践 【免费下载链接】qpdf PDF viewer widget for Qt 项目地址: https://gitcode.com/gh_mirrors/qpd/qpdf 在Qt应用开发中&#xff0c;PDF文档处理一直是个技术痛点。传统方案要么依赖平台原生组件导致跨平台…...

开启iphone的墙纸玻璃效果

要开启 iPhone 的墙纸“玻璃效果”&#xff0c;需注意&#xff1a;苹果并未在 iOS 中提供名为“玻璃效果”的独立开关&#xff0c;但通过 “液态玻璃”(Liquid Glass)设计风格 和 “空间场景”壁纸 等功能&#xff0c;可实现类似视觉效果。以下是基于最新公开资料的操作指南&am…...

5大场景全覆盖:BilibiliDown视频下载工具的全方位应用指南

5大场景全覆盖&#xff1a;BilibiliDown视频下载工具的全方位应用指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirro…...

3大突破!WPS-Zotero如何重塑科研文献管理流程

3大突破&#xff01;WPS-Zotero如何重塑科研文献管理流程 【免费下载链接】WPS-Zotero An add-on for WPS Writer to integrate with Zotero. 项目地址: https://gitcode.com/gh_mirrors/wp/WPS-Zotero 你是否正在经历这些文献管理困境&#xff1f; 当你在Linux系统上撰…...

KuiTest:基于大模型通识的UI交互遍历测试

在技术领域&#xff0c;我们常常被那些闪耀的、可见的成果所吸引。今天&#xff0c;这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力&#xff0c;让我们得以一窥未来的轮廓。然而&#xff0c;作为在企业一线构建、部署和维护复杂系统的实践者&#xff0c;我们深知…...

3大核心功能解决B站资源保存难题:BiliTools跨平台工具箱深度评测

3大核心功能解决B站资源保存难题&#xff1a;BiliTools跨平台工具箱深度评测 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTo…...