当前位置: 首页 > 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;添加自己的一些见解。 自动驾驶传感器融合算法 - 自动驾驶汽车中的激…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...