栈在表达式中的应用(中/后前缀的转换)机算,手算模拟。

news2024/9/28 11:17:03

一.中缀表达式转后缀表达式

初始化一个栈,用于保存 暂时还不确定的运算顺序的“运算符” 。
从 左往右 依次扫描,会遇到三种情况:

1.遇到 操作数,直接加入后缀表达。

2.遇到 界限符
    ①遇到 “(” 入栈。
    ②遇到 “)” 依次弹出栈内运算符并加入后缀表达式,直到弹出 "("为止。(注: “(” 不加入后缀表达式)

3.遇到 运算符 依次弹出栈中优先级 高于或等于 当前运算符的所有运算符,并且加入后缀表达式中,直到碰到 “(” 或者 栈空为止。

注:处理完所有字符后,将栈中剩下的运算符依次弹出,并加入后缀表达式。

1.某些地方的解释

  ①依次弹出栈中优先级 高于或等于 当前运算符的所有运算符
在中缀表达式中,除了第一个与最后一个操作数外,每个操作数左右都会有运算符。我们是从左往右扫描:当我们扫到操作数的 左运算符时,由于不知 右运算符,故不知左右生效顺序,继续扫描

   当我们扫到 右运算符后:
①若右运算符优先级低于或等于 左运算符 (即栈中优先级高于或等于当前扫到的运算符)根据“左优先”原则,我们可以确定,先让左边运算符生效,(即弹出所有优先级大于等于当前的运算符)

②若右运算符优先级高于栈中左边运算符优先级,则加入栈中,依然无法确定生效顺序,因为相对于下一个操作数的右运算符来说,当前运算符相当于左运算符,由于不知道下一个操作数的右运算符,所以当前确定不了生效顺序,只好先入栈。
在这里插入图片描述

  ②直到碰到 “(” 或者 栈空为止
这个规则,只有在含有两层以上 " ( ) " 才会触发。
我们可以把 " ( ) "内的表达式 看成一个独立的子式,其规则与主式一样,两者生效顺序互不影响。

  ③遇到 “)” 依次弹出栈内运算符并加入后缀表达式
当遇到了 “)” 我们就确定了 这个 括号的范围, 那么我们就可以让括号内的先生效。

2.机算过程

在这里插入图片描述

3.手算模拟

第一步:确定运算符生效顺序
第二步:选择下一个运算符,按<左操作数 ,右操作数 , 运算符 >的顺序组成一个新的操作数。直至处理完所有。

王道给出左优先原则,若两个运算符可以同时生效,则为了保证算法的确定性,可先让左边的运算符生效。
注:左优先不是术语,考试要详细叙述。
在这里插入图片描述

三.计算后缀表达式

1.机算

1,从左往右扫描下一个元素,直到处理完所有元素
2.若扫描到 操作数 则入栈并继续 1
 若扫描到 运算符 则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶 继续 1.
注:先出栈的为右操作数。
在这里插入图片描述

2.手算

四.中缀表达式的计算(中缀转后缀算法+后缀表达式计算算法)

初始化两个栈:操作数栈运算符栈
1.若扫描到操作数,压入操作数栈

2.若扫描到运算符 或 界限符,则按照 “中缀转后缀–机算” 相同的逻辑压入运算符栈
(期间也会弹出运算符,每弹出一个运算符时,就需要弹出两个操作数栈的栈顶元素,并执行相应运算,运算结果再压回操作数栈)

在这里插入图片描述

五.其他

1.中缀转前缀时,手算与中缀转后缀区别:
①确定运算顺序
②选择下一个运算符,按<运算符 , 左操作数 , 右操作数> 组成一个新的操作数,直到处理完毕。

2.中缀转前缀时,机算与中缀转后缀区别:
①从右往左扫描
②先出栈的为“左操作数

3.后缀转中缀

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

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

相关文章

计算机系统-虚拟存储器

例行前言&#xff1a; 本篇不是学习课程时的笔记&#xff0c;是重看这本书时的简记。对于学习本课程的同学&#xff0c;未涉及的内容不代表考试不涉及(mmap&#xff0c;动态存储器分配&#xff0c;linux虚拟存储器)。本章的大部分内容已经在OS中学习过了&#xff0c;但本章内容…

SSM架构项目实战(CRM)

开始时间&#xff1a;7月17日 技术架构 &#xff08;一&#xff09;Web开发4层开发 视图层&#xff08;view&#xff09;&#xff1a;展示数据&#xff0c;跟用户交互。《html&#xff0c;css&#xff0c;js&#xff0c;jquery&#xff0c;bootstrap&#xff08;ext|easyUI&…

代码随想录算法训练营第三十五天 | 两维贪心、重叠区间

860.柠檬水找零 文档讲解&#xff1a;代码随想录 (programmercarl.com) 视频讲解&#xff1a;贪心算法&#xff0c;看上去复杂&#xff0c;其实逻辑都是固定的&#xff01;LeetCode&#xff1a;860.柠檬水找零_哔哩哔哩_bilibili 状态&#xff1a;能直接做出来。 思路 只需要维…

【java-04】深入浅出多态、内部类、常用API

主要内容 多态 内部类 常用API 1 多态 1.1 面向对象三大特征 ? 封装 , 继承 , 多态 1.2 什么是多态 ? 一个对象在不同时刻体现出来的不同形态 举例 : 一只猫对象 我们可以说猫就是猫 : Cat cat new Cat();我们也可以说猫是动物 : Animal cat new Cat();这里对象在不…

知识推理——CNN模型总结

记录一下我看过的利用CNN实现知识推理的论文。 最后修改时间&#xff1a;2023.05.08 目录 1.ConvE 1.1.解决的问题 1.2.优势 1.3.贡献与创新点 1.4.方法 1.4.1 为什么用二维卷积&#xff0c;而不是一维卷积&#xff1f; 1.4.2.ConvE具体实现 1.ConvE 论文&#xff1a…

聊聊我在阿里第一年375晋升的心得

前言 思来想去&#xff0c;觉得这个事情除了领导赏识大佬抬爱之外&#xff0c;还是挺不容易的&#xff0c;主观认为有一定的参考价值&#xff0c;然后也是复盘一下&#xff0c;继续完善自己。 绩效 首先晋升的条件就是要有个好绩效&#xff0c;那么我们就先基于绩效这个维度…

基于`IRIS`列存储,我们能做什么

文章目录 基于IRIS列存储&#xff0c;我们能做什么简介使用场景如何使用列存储什么情况下使用列储存统计数据数量count计算字段平均值avg计算字段和sum 列存储与行存储区别总结 基于IRIS列存储&#xff0c;我们能做什么 简介 列存储是一种数据存储方式&#xff0c;与传统的行…

Win11-RTX4060安装Pytorch-GPU干货避坑指南

文章目录 1、版本要和pytorch官网对应&#xff0c;CUDA11.8及其对应版本的cudnn2、CUDA Toolkit安装出现自动重启3、Python版本4、配置永久国内镜像源5、要在激活的虚拟环境里安装pytorch6、进入python后检查是否gpu配置成功7、在虚拟环境中启动jupyter notebook8、conda中inst…

【Docker】5、Dockerfile 自定义镜像(镜像结构、Dockerfile 语法、把 Java 项目弄成镜像)

目录 零、学习内容一、镜像结构二、Dockerfile四、基于 java:8-alpine 构建自己的 Java 项目镜像 零、学习内容 镜像结构Dockerfile 语法构建 Java 项目 ① 之前使用的镜像都是 DockerHub 官方提供的 ② 开发者需要将自己的微服务制作为镜像 一、镜像结构 镜像是由应用程序及其…

【新星计划-2023】什么是ARP?详解它的“解析过程”与“ARP表”。

一、什么是ARP ARP&#xff08;地址解析协议&#xff09;英文全称“Address Resolution Protocol”&#xff0c;是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机&#xff0c;并接收返回消息&#xff0c;以此确…

ConcurrentHashMap实现原理

1. 哈希表 1.1 介绍 哈希表是一种key-value存储数据的结构&#xff0c;根据key即可查到对应的value。 如果所有的键是整数&#xff0c;我们可用简单的无序数组来表示&#xff0c;键作为数组索引&#xff0c;值即为对应的值 1.2 链式哈希表 链式哈希表本质由一组链表构成。每…

用MacBook实操:docker本地部署mysql+php+nginx坏境

大家好&#xff0c;我拿出我的macbook,带着大家实操用docker部署mysqlphpnginx环境。 之前的小白实操搭建Nginx1.2.0PHP7.0MySQL5.7Thinkphp5项目&#xff0c;看这篇就够了&#xff0c;欢迎阅读。 之前的是服务器上配置环境&#xff0c;现在在mac本地搭建全栈开发环境。 目录…

LiveData详解(实战+源码+粘性事件解决方案)

1. 简介 LiveData 是一种可观察的数据存储器类。与常规的可观察类不同&#xff0c;LiveData 具有生命周期感知能力&#xff0c;意指它遵循其他应用组件&#xff08;如 activity、fragment 或 service&#xff09;的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周…

mysql查询之子查询

0. 概念 SQL语句中嵌套SELECT语句&#xff0c;称为嵌套查询&#xff0c;又叫子查询。 查询可以基于一个表或多个表。子查询可以添加到SELECT、UPDATE和DELETE中&#xff0c;而且可以进行多层嵌套。子查询常用操作符有 ANY(SOME)&#xff0c;ALL、IN、EXISTS。也可以使用比较运…

Codeforces Round 872 (Div. 2) A-C

Start&#xff1a;May/08/2023 20:05UTC8 Length&#xff1a;02:00 这次总该上分了吧 A LuoTianyi and the Palindrome String 1 s, 256 MB x8531 都一样是-1&#xff0c;普通回文是size()-1 #include<bits/stdc.h> using namespace std; #define int long long #def…

架构-软件工程模块-1

概述 这一模块选择题的分值比较多&#xff0c;案例题和论文也有能用上的地方。主要知识点会特殊标注或说明。 软件开发生命周期 软件工程三要素&#xff1a;方法、工具、过程。不会直接考&#xff0c;但可帮助记忆理解。 传统软件生命周期方法学分为&#xff1a;&#xff08;选…

使用sharding-scaling和sharding-proxy做分库分表数据迁移

背景&#xff1a; 现在有一个有一张表被分成了两张表&#xff0c;t_score1 ,t_score2&#xff0c;但后期数据量激增&#xff0c;两张表不能满足业务需求&#xff0c;扩张为2个库每个库2张表&#xff0c;即数据库 ds_0下有t_score1 ,t_score2 &#xff0c;数据库ds1下有t_score1…

浏览器插件的使用

善于使用浏览器插件&#xff0c;能起到高效上网的作用。 Microsoft Edge 是全球广受欢迎的浏览器&#xff0c;浏览器本身具有快速、简单和轻量级的特点。一流的性能系统和访问速度极大提升您的浏览体验。 对于浏览器的用户来说&#xff0c;安装一些实用的插件&#xff0c;能让…

Navicat设置Oracle数据库主键自增1的方法步骤

一、 创建如下表 Oracle数据库不同于Mysql、Sql Server数据库&#xff0c;Oracle数据库主键自增不能在建表时直接设置&#xff0c;而是需要通过序列和触发器进行设置&#xff01; 二、创建序列 1 2 3 4 5 6create sequence SEQ_DEVICEDATAINFO start with 1 …

iOS可视化动态绘制连通图

上篇博客《iOS可视化动态绘制八种排序过程》可视化了一下一些排序的过程&#xff0c;本篇博客就来聊聊图的东西。在之前的博客中详细的讲过图的相关内容&#xff0c;比如《图的物理存储结构与深搜、广搜》。当然之前写的程序是比较抽象的。上篇博客我们以可视化的方式看了一下各…