栈的应用——用栈实现算数混合运算表达式的计算

1、单目运算符双目运算符

算数运算符分为单目运算符和双目运算符等
单目运算符只需要一个操作数,双目运算符需要两个操作数

  • 双目运算符最常见:常见的算术运算符:±*/,比较运算符:<>=等等
  • 以下是一些单目运算符:

正号 (+): 用于表示正数或给数值一个正号。例如:+5 仍然是 5。

num = +5
print(num)  # 输出: 5

负号 (-): 用于表示负数或取一个数的相反数。例如:-5 是 -5,而 -(-5) 是 5。

num = -5
print(num)  # 输出: -5
num = -(-5)
print(num)  # 输出: 5

位非运算符 (~): 这是一个按位非运算符,用于对整数的每一位进行取反操作。例如,对于数字 5(其二进制表示为 101),位非运算的结果是 ~101,即 -6。

num = ~5
print(num)  # 输出: -6

需要注意的是,Python中的大多数运算符(如加法、减法、乘法、除法、取模等)都是双目运算符,它们需要两个操作数。而逻辑运算符(如and、or、not)中的not是单目的,但它更常用于逻辑表达式中,而不是直接对单个值进行操作。

2、中缀表达式

两大特点:优先级、结合性
优先级:乘除法>加减法
结合性:优先计算括号内的表达式
中缀表达式交给计算机处理有很大的问题,计算机串行读数据,当遇到运算符时是立即计算还是延期计算
因此引入后缀表达式

3、后缀表达式

中缀表达式:3+4*(5+6)-3
后缀表达式:3456+*+3-
将中缀表达式转化成为后缀表达式有利于计算机处理算数运算

4、栈的应用——中缀转后缀

(1)手算图示

在这里插入图片描述

(2)计算机转化后缀表达式思路:

后缀表达式放在列表中,因为最后要将后缀表达式串行(按照顺序)读,运算符放在栈中,接下来解释过程
1、遇到数字:直接放在列表中
2、遇到符号分情况讨论

  • 当栈为空:压入栈
  • 当运算符优先级高于栈顶运算符:压入栈
  • 遇到左括号,压入栈(括号相当与新的开始,括号后的符号优先级看作全部高于左括号)
  • 遇到右括号,从栈中弹出运算符(append到后缀表达式列表中),直到遇到左括号
  • 当运算符优先级低于或等于栈顶运算符,从栈中弹出运算符(append到后缀表达式列表中)
  • 最后把栈中剩余的运算符弹出,直到栈为空

当然,要先把表达式利用正则表达式拆分,并利用字典定义符号优先级

(3)代码:

  1. 定义栈这样一个数据结构,具体方法如下:
    在这里插入图片描述
class Stack:def __init__(self):self.items = []def push(self, item):self.items.append(item)def pop(self):if not self.is_empty():return self.items.pop()else:return Nonedef peek(self):if not self.is_empty():return self.items[-1]else:return Nonedef is_empty(self):return len(self.items) == 0def size(self):return len(self.items)
  1. 用栈实现转化的代码:

在这里插入图片描述

import re
from stack2 import *precedence = {'(':0,'+': 1, '-': 1, '*': 2, '/': 2, '**': 3}
def infix_to_postfix(expression):output = 

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

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

相关文章

基于卷积神经网络的土豆疾病识别系统(pytorch框架)【python源码+UI界面+前端界面+功能源码详解】

功能演示&#xff1a; 土豆疾病识别系统&#xff0c;基于vgg16&#xff0c;resnet50卷积神经网络&#xff08;pytorch框架&#xff09;_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神经网络的土豆疾病识别系统是在pytorch框架下实现的&#xff0c;系统中有两…

Linux | MySQL基础

MySQL MySQL是关系型数据库&#xff08;RDBMS&#xff09;&#xff0c;采用表格结构存储数据 同类型的还有Oracle、SQL Server 主要特点 适用于中小规模、关系型数据库系统(RDBMS) 支持Linux、Unix、Windows等多种操作系统 支持Python、Java、Perl、PHP等编程语言 典型应…

计组第三版书例题

基础知识过一下 存储器与CPU的连接主要通过数据总线、地址总线和控制总线实现。CPU首先向存储器发送地址信号&#xff0c;然后发出读写控制信号&#xff0c;最后在数据总线上进行数据的读写操作 。这种连接方式确保了CPU能够正确地访问和控制存储器中的数据。 https://blog.cs…

关于k8s集群中连接数不够,内存溢出的20道高级面试题

1. 描述Kubernetes集群中连接数不够的情况&#xff0c;以及可能导致的后果。 在Kubernetes集群中&#xff0c;连接数不够通常指的是网络连接的限制&#xff0c;这可能是由于以下几个原因造成的&#xff1a; 负载过高&#xff1a;当服务或应用承受的请求量超过其能够处理的范围…

树的基本概念与二叉树

文章目录 树的基本概念与二叉树一、树的概念和结构1. 树的概念2. 树的相关概念 二、树的存储1. 左孩子右兄弟表示法2. 双亲表示法 三、二叉树1. 特殊的二叉树1.1 满二叉树1.2 完全二叉树 树的基本概念与二叉树 一、树的概念和结构 1. 树的概念 树是一种非线性的数据结构,它是…

11 - Debian如何限制sudo权限

作者&#xff1a;网络傅老师 特别提示&#xff1a;未经作者允许&#xff0c;不得转载任何内容。违者必究&#xff01; Debian如何限制sudo权限 《傅老师Debian小知识库系列之11》——原创 上一篇介绍了特定用户使用su命令切换root。但是权限太大&#xff0c;而且root密码有泄…

MBTI测试背后的心理学原理:为什么它能揭示你的职业性格?

MBTI简介 迈尔斯-布里格斯类型指标&#xff08;Myers–Briggs Type Indicator&#xff0c;MBTI&#xff09;是由美国作家伊莎贝尔布里格斯迈尔斯和她的母亲凯瑟琳库克布里格斯共同制定的一种人格类型理论模型。 该指标以瑞士心理学家卡尔荣格划分的8种心理类型为基础&#xff…

节点与其祖先之间的最大差值(DFS,Java)

题目描述&#xff1a; 给定二叉树的根节点 root&#xff0c;找出存在于 不同 节点 A 和 B 之间的最大值 V&#xff0c;其中 V |A.val - B.val|&#xff0c;且 A 是 B 的祖先。 &#xff08;如果 A 的任何子节点之一为 B&#xff0c;或者 A 的任何子节点是 B 的祖先&#xff…

【数据结构】--- 探索栈和队列的奥秘

关注小庄 顿顿解馋૮(˶ᵔ ᵕ ᵔ˶)ა &#x1f4a1;个人主页&#xff1a;9ilk &#x1f4a1;专栏&#xff1a;数据结构之旅 上回我们学习了顺序表和链表&#xff0c;今天博主来讲解两个新的数据结构 — 栈和队列 &#xff0c; 请放心食用 文章目录 &#x1f3e0; 栈&#x1…

三足鼎立 PTA(25分)

目录 题目 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 样例解释&#xff1a; 题解 C code Java code 题目 当三个国家中的任何两国实力之和都大于第三国的时候&#xff0c;这三个国家互相结盟就呈“三足鼎立”之势&#…

【C++】二叉搜索数

目录 一、二叉搜索树的概念 二、二叉搜索树的模拟实现 1、定义节点 2、构造二叉树 3、析构二叉树 ​4、拷贝二叉树 5、二叉树赋值 6、插入节点 &#x1f31f;【非递归方式】 &#x1f31f;【递归方式】 7、打印节点 8、搜索节点 &#x1f31f;【非递归方式】 &…

我的需求分析方法论

或网上看了无数博客文章、技术视频&#xff0c;或购买金装版本技术书籍&#xff0c;看过无数原理原则、各种各样经典方法论&#xff0c;真正在实际开发工作中&#xff0c;本能去遵守和执行的又留下多少呢。 启动一个新系统时&#xff0c;我们可能还会去花些时间遵循这些原理原则…

中文大模型隐私保护哪家强?InternLM 与 Baichuan2 胜出!

引言&#xff1a;中文大模型隐私保护能力探索 本文研究了大语言模型&#xff08;LLMs&#xff09;对隐私和安全的影响&#xff0c;采用了三层渐进框架对语言系统的隐私进行评估。主要目标是全面评估LLMs对私人信息的敏感性&#xff0c;并检查其在识别、管理和保护敏感数据方面…

每日面经分享(Git经典题目,Git入门)

1. GitHub是什么 a. Git是一个分布式版本控制系统&#xff0c;作用是跟踪、管理和协调软件开发项目中的代码更改。 b. 提供了一种有效的方式来管理代码的版本历史&#xff0c;以及多人协作开发的能力。 2. Git的作用有哪些 a. 版本控制&#xff1a;Git可以记录每次代码更改的…

混合专家(MoE)模型

文心一言 混合专家模型&#xff08;Mixture of Experts&#xff0c;简称MoE&#xff09;是一种基于Transformer架构的模型设计策略。它通过将多个模型&#xff08;称为“专家”&#xff09;直接结合在一起&#xff0c;以获得更好的预测性能。这种模型特别适用于处理大规模数据…

1.8 面试经典150题 O(1)时间插入删除和获取随机元素

O(1)时间插入删除和获取随机元素 实现RandomizedSet 类&#xff1a; RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时&#xff0c;向集合中插入该项&#xff0c;并返回 true &#xff1b;否则&#xff0c;返回 false 。bool remove(int va…

vLLM vs TGI 部署大模型以及注意点

LLM 高并发部署是个难题&#xff0c;具备高吞吐量的服务&#xff0c;能够让用户有更好的体验&#xff08;比如模型生成文字速度提升&#xff0c;用户排队时间缩短&#xff09;。 vllm github 仓库 1 vLLM 1.1 启动模型服务 # cd /workspace/vllm python3 -m vllm.entrypoin…

springAI初体验 让人人都能跑大模型

springAI初体验 让人人都能跑大模型 Spring AI是一个旨在简化开发包含人工智能功能的应用程序的项目。它受到Python项目如LangChain和Llama Index的启发&#xff0c;但并非这些项目的直接移植。Spring AI的核心理念是为开发AI应用程序提供基础抽象&#xff0c;这些抽象有多个实…

leetcode496-Next Greater Element I

题目&#xff1a; nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。 给你两个 没有重复元素 的数组 nums1 和 nums2 &#xff0c;下标从 0 开始计数&#xff0c;其中nums1 是 nums2 的子集。 对于每个 0 < i < nums1.lengt…

MyBatis中的#{}与${}注入问题

MyBatis中的#{}与${}注入问题 MyBatis是一个流行的Java持久层框架,用于将对象与数据库中的数据进行映射。然而,如果不当使用,MyBatis也可能受到诸如SQL注入这类的安全问题的影响。 SQL注入是一种攻击技术,攻击者通过在输入中插入恶意SQL语句片段,企图对数据库执行非预期的…