【20221230】栈和队列的小结

news2024/11/14 10:31:01

一、栈(stack)

 栈是先进后出的(FILO)的数据结构,它只有一个出口。

 二、队列

 队列是一种先进先出(FIFO)的数据结构,它有两个出口。

 栈和队列是STL(C++标准库)里面的两种数据结构。

栈提供push 和 pop 等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)。 不像是set 或者map 提供迭代器iterator来遍历所有元素。

栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。

所以STL中栈往往不被归类为容器,而被归类为container adapter(容器适配器)。

 STL 中栈是用什么容器实现的?

栈的内部结构,栈的底层实现可以是vector,deque,list 都是可以的, 主要就是数组和链表的底层实现。

我们常用的SGI STL,如果没有指定底层实现的话,默认是以deque为缺省情况下栈的底层结构。

deque是一个双向队列,只要封住一段,只开通另一端就可以实现栈的逻辑了。

SGI STL中 队列底层实现缺省情况下一样使用deque实现的。

队列中先进先出的数据结构,同样不允许有遍历行为,不提供迭代器, SGI STL中队列一样是以deque为缺省情况下的底部结构。

所以STL 队列也不被归类为容器,而被归类为container adapter( 容器适配器)。


概述:栈和队列被称为duque的配接器,其底层是以deque为架构。通过deque执行具体操作。

例题: 

1、剑指1-栈和队列  (用栈实现队列、包含min函数的栈)

 2、用队列实现栈     (将队首插入队尾,再pop)

 3、有效的括号  (遇到配对的问题,用栈!)栈非常适合用来做对称匹配类的题目。

 每遇到一个(   [   {  左括号,向栈内压入对应的右括号;当相应右括号为栈顶元素时,pop出去,不然的话直接fasle(这里得先提前判断一下栈是否为空,否则会报错);最后如果遍历完成,栈不为空则false,空则true(返回empty即可)

 4、删除字符串中的所有相邻重复项   (匹配问题,用栈解决!!)

当栈为空或者此时遍历的字符与栈顶值不等时,压入;否则pop出。可以用string来模拟栈,可以避免最后再转化为字符串形式。

5、逆波兰表达式求值 (遇到数字入栈,遇到运算符则取出栈顶的两个数字进行对应计算,并将结果压入栈中。)

6、滑动窗口的最大值(使用单调队列的经典题)

维护元素单调递减的队列就叫做单调队列,即单调递减或单调递增的队列。C++中没有直接支持单调队列,需要我们自己来实现一个单调队列。

7、解析布尔表达式 (在每日题中发现的用栈解决的匹配问题,挺有意思)

8、前K个高频元素  (后面补上)

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

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

相关文章

【攻防世界】Web easyupload

知识点讲解 本题的主要考点为利用fastcgi的.user.ini特性进行任意命令执行 关于.user.ini文件是怎么利用的,可以点此查看非常详细,我这里截取一段 .user.ini实际上就是一个可以由用户“自定义”的php.ini,我们能够自定义的设置是模式为“PHP…

创作者身份认证申请规则及审核标准

当前创作者身份主要包括优质创作者、新星创作者、其他(特殊情况)。 有一些身份认证,比如:企业员工认证、学生认证等,不属于创作者身份认证范畴,申请的时候需要找到对应的认证进行申请(https://…

python【多态特性】

多态:同样的行为(函数),传入不同的对象,得到不同的状态 特点:通过继承的方式体验抽象动作相同而具体实现细节不同细节的特性 如,定义函数(方法),通过类型注…

NetInside帮助IT提高应用性能分析能力(一)

前言 某大学信息中心老师反应,用户反馈科研创新服务器平台有访问慢的情况,需要通过流量分析系统来了解系统的运行情况,此报告专门针对系统的性能数据做了分析。 信息中心已部署NetInside流量分析系统,使用流量分析系统提供实时和…

进销存管理系统哪个比较好?

在如今互联网的刺激之下,企业之间的竞争逐渐加剧,很多企业之所以会逐渐被市场淘汰,主要原因都来源于管理上的混乱,而进销存软件的出现可以帮助企业解决管理难题。 选择一款合适的省心的进销存软件,有效提升企业的核心…

Redis中缓存穿透、击穿、雪崩以及解决方案

缓存穿透 理解: 缓存穿透是指查询一个根本不存在的数据,缓存层和持久层都不会命中。在日常工作中出于容错的考虑,如果从持久层查不到数据则不写入缓存层,缓存穿透将导致不存在的数据每次请求都要到持久层去查询,失去…

【正点原子FPGA连载】第八章使用Vitis开发Linux应用摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第八章使用Vitis…

日本知名汽车零部件公司巡礼系列之株式会社140

株式会社140 业务内容: ・特殊切削工具汽车零件加工用特殊工具的设计、制作・特殊零件海斯、超硬、陶瓷、cBNCD工具的设计与制作・制造用夹具、安装用具、检查用具、定位用具、消耗工具等一制造装饰零件相关的装置或专用机的构成零件等・模具零件制作…钳子、模具…

Spring Boot整合MyBatis(保姆级教程)

前言 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objec…

【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第九章Linux图形…

单片机之震动传感器、继电器、433M无线发射接收等模块介绍及应用

目录 一、震动传感器模块 二、继电器介绍 三、433M无线发射接收模块 1、 无线控制报警器代码 2、电动车简易防盗器代码实现 一、震动传感器模块 单片机供电VCC GND接单片机 产品不震动,输出高电平、模块上的AO口 产品震动,输出低电平&#xff0c…

Python使用库(一)

Python使用库 库 就是是别人已经写好了的代码, 可以让我们直接拿来用. 荀子曰: “君子性非异也,善假于物也” 一个编程语言能不能流行起来, 一方面取决于语法是否简单方便容易学习, 一方面取决于生态是否完备. 所谓的 “生态” 指的就是语言是否有足够丰富的库, 来…

day11-分类和static

1.案例驱动模式 1.1案例驱动模式概述 (理解) 通过我们已掌握的知识点,先实现一个案例,然后找出这个案例中,存在的一些问题,在通过新知识点解决问题 1.2案例驱动模式的好处 (理解) 解决重复代码过多的冗余,提高代码的复用性解决业务逻辑聚集紧密导致的可读性差,提高代码的可…

【python Turtle源码】教你如何画一只迎福虎将~

前言 大家早好、午好、晚好吖 ❤ ~ 代码展示 导入模块 from turtle import * import time因代码体量有点多 这里就给大家部分展示了,有需要的可以文章下方名片获取哦~ (或者评论已点赞收藏,求代码,我私你呀) COLO…

用Python实现童年小游戏贪吃蛇

贪吃蛇游戏是有史以来最受欢迎的街机游戏之一。在这个游戏中,玩家的主要目标是在不撞墙或不撞墙的情况下抓住最大数量的水果。在学习 Python 或 Pygame 时,可以将创建蛇游戏视为一项挑战。这是每个新手程序员都应该接受的最好的初学者友好项目之一。学习…

Glove模型的原理与代码

文章目录一、背景二、原理部分1.共现矩阵2. F值的获取3. Glove公式的获取4. 损失函数的获取三、代码部分1.词表映射2. 词嵌入3. 训练函数4. 输出结果总结一、背景 GloVe模型即Global Vectors模型,该模型认为语料库中单词出现的统计(共现矩阵) 是学习词向量表示的无监…

将博客系统部署到云服务器上(允许外网访问)

努力经营当下,直至未来明朗! 文章目录访问链接测试部署简单回顾 部署普通小孩也要热爱生活! 访问链接测试 个人博客系统 登录名:小小周 密码:xiaozhou 部署 在Linux上搭建一个Java部署环境,然后开始进行博…

声明式事务的属性之传播行为

声明式事务的属性之传播行为 ①介绍 当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。 ②测试 Controller public class BookC…

望尘科技通过港交所聆讯:坚持深耕“体育游戏”的收获者

文|螳螂观察 作者|李永华 行将结束的2022年,体育大年,除了令人心跳加速的赛事,还有遍地的“黄金”。 各领域大大小小的厂商们使出浑身解数,掘金市场。 刚刚过去不久的世界杯,让这一过程到达了高潮。 广告代言、彩…

排序(完整版)

目录 一、基本概念 二、排序的分类 三、排序算法的好坏的衡量 四、五类内排序 插入排序 直接插入排序 演示: 关键代码: 完整代码 结果: 插入排序算法分析: 带哨兵的插入排序 举例: 关键代码 完整代码 折半…