数据结构·栈

news/2024/10/12 15:16:12/

总结:

任意括号匹配问题

  • 利用 dict简化匹配问题
  • 用list 近似为stack
  • pop返回self
    括号匹配
class Solution:def isValid(self, s: str) -> bool:if len(s)%2!=0:return Falsest=[]dict={')':'(',']':'[','}':'{'}for str in s:if str not in dict:# 左括号st.append(str)elif not st or st.pop()!=dict[str]:return Falsereturn not st

十进制转换为二进制

  • 栈的一个简单运用:倒序输出
from pythonds.basic import Stack
def Deci2Binary(n:int):st = Stack()while n>0:remainer=n%2quotient=n//2n=n//2st.push(remainer)output_number=''while st.size()>0:output_number=output_number+str(st.pop())print(f'十进制{n}转换为二进制为{output_number}')return output_number
if __name__ == "__main__":deci_n=984bina_n=Deci2Binary(deci_n)

中序转后序

无论什么序,运算数的相对顺序不变
在后序表达式中:优先级高的运算符靠左
利用这个特性:遇到优先级低于自己的,必须提前出栈;否则不用出栈

import stringfrom pythonds.basic import Stack
def infix2Postfix(infix_expression:str):dict={}dict[')']=4dict['*']=3dict['/']=3dict['+']=2dict['-']=2dict['(']=1def compare_prior(opa:str,opb:str):# 返回优先级的比较return dict[opa]>dict[opb]opstack=Stack()res=[]token_list=infix_expression.split()for token in token_list:"""三种情况:1.正常的数字或者字母2.优先级低:出栈3.优先级高:入栈"""if token in string.ascii_uppercase:res.append(token)elif token in string.digits:res.append(token)else:# if opstack.isEmpty() or compare_prior(token,opstack.peek()):#     # 栈为空且优先级高:加入while not opstack.isEmpty() and compare_prior(token,opstack.peek()):# 如果栈顶元素优先级更大# 栈不为空且优先级低:pop_item=opstack.pop()if pop_item not in ['(',')']:# (*)-res.append(pop_item)opstack.push(token)# print(res)# print(opstack.peek())return resif __name__ == "__main__":infix_expression="( A + B ) * ( C + D )"print(infix2Postfix(infix_expression))

http://www.ppmy.cn/news/1537914.html

相关文章

使用Docker搭建WAF-开源Web防火墙VeryNginx

1、说明 VeryNginx 基于 lua_nginx_module(openrestry) 开发,实现了防火墙、访问统计和其他的一些功能。 集成在 Nginx 中运行,扩展了 Nginx 本身的功能,并提供了友好的 Web 交互界面。 文章目录 1、说明1.1、基本概述1.2、主要功能1.3、应用场景2、拉取镜像3、配置文件4、…

Docker 实践与应用举例

Docker 实践与应用举例 Docker 已经成为现代软件开发和部署中的重要工具,通过容器化技术,开发者可以轻松管理应用的依赖环境、简化部署流程,并实现跨平台兼容性。本篇博客将详细介绍 Docker 的基本概念、实践操作以及应用场景,帮…

vue项目启动的报错问题

背景 三年前的一个vue3项目,当时用的14版本开发的,最近想把它接入到我的主应用中,在启动中,由于自己用的node版本是16,导致安装依赖的时候,发生了报错 具体报错内容 npm WARN deprecated node-sass4.14.…

知识图谱入门——11:构建动态图谱渲染应用:Vue3与Neo4j的集成与实践

在知识图谱与大数据技术领域,构建动态图谱是一项非常重要的任务。这篇博客将带你深入了解如何利用Vue.js、D3.js以及Neo4j,开发一个能够实时渲染图谱节点和关系的应用。我们将从零开始,介绍如何搭建开发环境、安装依赖、与Neo4j数据库交互、到…

CocosCreator 快速部署 TON 游戏:Web2 游戏如何使用 Ton支付

在本篇文章中,我们将继续探讨如何使用 Cocos Creator 开发 Telegram 游戏,重点介绍如何集成 TON 支付功能。通过这一教程,开发者将学会如何在游戏中接入 TON Connect,实现钱包连接、支付以及支付后的校验流程,最终为 W…

《Windows PE》4.3 延迟加载导入表

延迟加载导入表(Delayed Import Table)是PE文件中的一个数据结构,用于实现延迟加载(Lazy Loading)外部函数的机制。 延迟加载是指在程序运行时,只有当需要使用某个外部函数时才进行加载和绑定,…

第二份代码:PointNet++

参考的依然是Pytorch的实现,PointNet里面的主要实现部分都在utils.py里,里面从微小模块逐渐的,搭建出网络中的几个主要模块结构,包括sampling&group等,所以我们主要分析的就是这个utils.py里面的内容 这份Pytorch实…

JS 运算符

目录 1. 赋值运算符 2. 一元运算符 2.1 自增 2.1.1 前置自增 2.1.2 后置自增 2.1.3 前置与后置自增对比 3. 比较运算符 3.1 字符串比较 4. 逻辑运算符 4.1 案例 5. 运算符优先级 1. 赋值运算符 2. 一元运算符 2.1 自增 2.1.1 前置自增 2.1.2 后置自增 2.1.3 前置与后…