【数据结构】栈和队列专题

news2025/1/13 9:39:11

前言

上篇博客我们讨论了栈和队列的有关结构,本篇博客我们继续来讨论有关栈和队列习题

这些题算是经典了

💓 个人主页:小张同学zkf

⏩ 文章专栏:数据结构

      若有问题 评论区见📝

🎉欢迎大家点赞👍收藏⭐文章 ​

 

 

目录

1. 括号匹配问题 

2.用队列实现栈

3.用栈实现队列

4.设计循环队列


 

1. 括号匹配问题 

由题可知我们需要判断一对括号是否成立,成立的话,就返回true,失败的话就返回false,这道题乍一看不好判断,其实我们可以用栈来解决,栈是后进先出的原则,我们可以判断如果是左括号的话让这个括号进栈,如果是右括号的话,让栈里的括号出栈与右括号匹对,若匹对成功,则继续判断下一个括号,这里我们需要考虑极端情况,假如括号都遍历完了,栈内还有左括号,代表此时左括号多,不匹配,所以还需要判断栈是否为空,还有如果第一个入栈的括号若是右括号,必定不匹配,直接false。

思路已给出,代码如下

对于c语言来说,注意先把栈写好,写好后再调用栈的函数,后续c++就不用这么麻烦了


2.用队列实现栈

 

这道题就是给你两个队列,通过队列实现一个栈,我们都知道栈是后进先出的原则,而队列是先进先出的原则,那如何用两个队列实现栈那?

 

首先我们思考,假如现在有两个队列q1和q2,我们画图分析

根据图上操作要想实现栈的后进先出的原则,我们在入栈时先用一个队列q1来做入栈操作,若出栈,由于后进先出的原则,我们可以先把除最后一个元素,剩下的元素全部导入q2,然后再将还在q1的元素通过出队的方式实现出栈,若继续入栈,此刻元素都在q2那么就用q2实现入栈操作,然后出栈时,按照上面的操作来回导入就可以了。 

所以出栈比较难,其他操作都是常规的,我们说一下出栈,我们可以用假设法,分为空的队列和非空的队列,非空的队列前size-1的元素,pop出来再push进空的队列,再pop最后一个元素

对了,判空条件是两个队里都没元素时,此刻栈为空

代码如下


3.用栈实现队列

 

 两个队列可以实现栈,那两个栈如何实现队列那

队列是先进先出原则,那对于栈来说,后进先出,若两个栈,将第一个栈的所有元素全部导入第二个栈,此刻我们想想比如第一个栈原本1,2,3,4,现在导入第二个栈此刻是不是就是4,3,2,1,此刻第二个栈若出栈的话正好符合了队列的先进先出

我们可以在画图看一下

其实对于两个栈,将第一个栈导入另一个栈,原本第一个栈的元素是后进先出的原则,导入第二个栈就变成现进先出了

代码如下

 


4.设计循环队列

重头戏来了

循环队列,就是在一个有限空间里重复利用,如图

 

如图,我们用两个指针指向数组头,一个是队头指针head,一个是队尾指针tail,push数据时,tail++,相当于Tail指向的是最后一个元素的下一个位置·,这一点跟栈栈顶元素有点类似,当初始化为0时, 指针指向最后一个元素的下一个位置,pop的话移动头元素head就行了,不过上面的图不现实,因为队列空和满时对应的条件都一样,都是head=Tail,所以我们得找一个办法让这个条件不一样,才能判空

一种是用一个size变量加加,记录数据,这是一种方法。

其实还有另一种方法,我们可以多一个空间,开k+1个空间,但只能放k个元素

如图,此刻若放满正好是第四个图,相当于tail的下一个位置就是head,那么我们是不是可以根据取模得到关系(tail+1)%(k+1)==head达到这个条件就是满,空的条件就很简单,head==Tail

 

如果是返回尾元素,就是tail指针指向的上一个位置,tail-1,但是我们得考虑如上图这种情况,Tail回到前面,但是此刻tail-1越界了,所以这时我们可以根据取模,(Tail-1+k+1)%(k+1) 就得到了尾元素的位置

头元素就是head指向的元素

OK,剩下的操作就是常规操作,代码如下


 结束语

栈与队列经典习题就结束了,有什么问题可私聊我,里面的满足条件多想一想就能想明白,特别是最后一道题

OK,本篇博客结束!!!

 

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

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

相关文章

赋能业务全球化,明道云HAP通过亚马逊云科技 FTR认证

近日,明道云作为融合多元能力的超级应用平台,成功通过了AWS(Amazon Web Service)的FTR(Foundational Technical Review)认证。FTR是亚马逊云科技为合作伙伴解决方案提供的一项全面技术审核机制,…

memset函数

让我们先看两个代码 memset(dp, 0x3f, sizeof(dp)); for (int i 0; i < 5; i)cout << dp[i] << " "; memset(dp, 127, sizeof(dp)); for (int i 0; i < 5; i)cout << dp[i] << " "; 代码结果如下&#xff1a; 现在我们来分…

for循环 while循环

for循环 for循环格式 for 变量 in 取值列表 #for in &#xffe5; &#xff08;seq 1 10&#xff09; do 命令序列 .......... done 另一种 for &#xff08;&#xff08;变量初始值&#xff1b; 变量范围&#xff0c; 变量迭代方…

简单记录下:Navicat 导出表结构至 Excel

首先我们需要通过sql语句查询出相关的表结构的结构 SELECT COLUMN_NAME AS 字段名称,COLUMN_TYPE AS 字段类型,IF(IS_NULLABLENO,否,是) AS 是否必填,COLUMN_COMMENT AS 注释FROM INFORMATION_SCHEMA.COLUMNSWHERE table_schema bs-gdsAND table_name sys_menu;查询的结构如下…

【软件测试】自动化测试 Selenium 篇(一)

一、什么是自动化测试 1、自动化测试介绍 自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或者系统&#xff0c;预设条件包括正常和异常&#xff0c;最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。 自动化就相当于将人工测试手段进行转换…

微软必应bing国内官方代理商,广告账户如何开户?

微软必应Bing作为全球知名的搜索引擎之一&#xff0c;其广告平台为众多企业提供了广阔的市场空间和精准的推广机会。对于中国内地的企业而言&#xff0c;通过必应Bing开展国内广告推广不仅能够触及更广泛的潜在客户群体&#xff0c;还能有效提升品牌影响力。通过微软必应Bing国…

现在闪侠惠递寄快递有福利了,千万不要因没把握住而后悔呀!

闪侠惠递平台寄快递现在真的是太便宜了&#xff0c;优惠价格把握不住&#xff0c;后悔都来不及&#xff01;大家可以在闪侠惠递上面寄快递&#xff0c;价格真的非常优惠呢&#xff0c;比咱们平常寄快递的价格都优惠呢&#xff0c;真的&#xff0c;小编都亲自替大家尝试过了呢。…

Python 操作数据库

十、Python3 操作数据库 1、Python3 操作 MySQL 1、基本介绍 Python3 操作 MySQL 数据库 可以使用的模块是 pymysql 和 MySQLdb。 这个两个模块都是通过自己的 API 执行原生的 SQL 语句实现的。 MySQLdb 是最早出现的一个操作 MySQL 数据库的模块&#xff0c;核心由C语言编…

文心一言 VS 讯飞星火 VS chatgpt (259)-- 算法导论19.3 2题

二、使用聚合分析来证明 FIB-HEAP-DECREASE-KEY 的 O(1) 摊还时间是每一个操作的平均代价。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; FIB-HEAP-DECREASE-KEY 是斐波那契堆&#xff08;Fibonacci Heap&#xff09;操作中的一个&#xff0c;它允许我们减少堆…

【C++】string类的使用③(修改器Modifiers || 非成员函数重载Non-member function overloads)

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; STL || C 目录 前言&#x1f525;修改器&#xff08;Modifiers&#xff09;**operator**appendpush_back和pop_backassigninserterasereplaceswap &#x1f525;非成员函数重载&#xff…

10 | 如何使用异步设计提升系统性能?

异步设计如何提升系统性能? 同步实现的性能瓶颈 Transfer(accountFrom, accountTo, amount) {// 先从 accountFrom 的账户中减去相应的钱数Add(accountFrom, -1 * amount)// 再把减去的钱数加到 accountTo 的账户中Add

ICode国际青少年编程竞赛- Python-5级训练场-多参数函数

ICode国际青少年编程竞赛- Python-5级训练场-多参数函数 1、 def go(a, b):Spaceship.step(2)Dev.step(a)Spaceship.step(b)Dev.turnRight()Dev.step(b)Dev.turnLeft()Dev.step(-a) Dev.turnLeft() Dev.step(3) Dev.step(-3) go(3, 2) go(6, 1) go(5, 2) go(4, 3)2、 def go(…

学习神经网络基础架构

今日学习了解了常见的几种神经网络基础架构。 1.卷积神经网络 卷积神经网络CNN是一种人工神经网络&#xff0c;旨在处理和分析具有网格状拓扑结构的数据&#xff0c;如图像和视频。将 CNN 想象成一个多层过滤器&#xff0c;可处理图像以提取有意义的特征并进行推理预测。 想…

谷歌邮箱2024最新注册教程

大家好&#xff0c;我是蓝胖子&#xff0c;今天教大家如何注册谷歌邮箱 谷歌邮箱的注册后面的用途会经常用得到 首先&#xff0c;需要魔法自行解决 第一步&#xff1a;打开谷歌官网 www.google.com 确保谷歌官网能正常打开 第二步&#xff1a;创建账号 接下来可能会遇到这…

如何写好设计文档

一、明确目的 在编写设计文档之前&#xff0c;首先要明确为什么需要写这份文档。设计文档是软件开发过程中的重要沟通工具&#xff0c;它有助于确保团队成员对项目有共同的理解&#xff0c;促进协作&#xff0c;便于变更管理&#xff0c;并提供历史记录。 二、编写方法 为目…

springboot月度员工绩效考核管理系统

摘要 本月度员工绩效考核管理系统采用java语言做为代码编写工具&#xff0c;采用mysql数据库进行系统中信息的存储与处理。框架采用springboot。 本系统的功能分为管理员和员工两个角色&#xff0c;管理员的功能有&#xff1a; &#xff08;1&#xff09;个人中心管理功能&am…

SQL高级语句

主知识点八&#xff1a;窗口函数 新开窗口&#xff0c;不影响原数据的排序。且子句必须有order by。窗口结果返回到 且窗口函数必须写在select后面&#xff01; ● 【排序窗口函数】 ● rank()over()——1,1,3,4 ● dense_rank()over()——1,1,2,3 ● row_number(…

macOS Sonoma 14.5(23F79)发布

系统介绍 黑果魏叔5 月 14 日快报&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14.5 正式版更新&#xff08;内部版本号&#xff1a;23F79 同 RC&#xff09;。这是去年 9 月发布的 macOS Sonoma 操作系统的第五次更新&#xff0c;距离上一次的 macOS Sonoma 14.4 更新已…

从CSDN搬家到微信公众号

博主将会在微信公众号里不断输出精品内容&#xff0c;陪伴大家共同成长。 如果你对博主的经历感兴趣&#xff0c;或者对博主的IT技术感兴趣&#xff0c;欢迎关注我的微信公众号&#xff0c;阅读我的技术文章&#xff0c;免费获取各种IT资源。也可以加我的微信成为我的好友&…

性能测试学习二

瓶颈的精准判断 TPS曲线 tps图 响应时间图 拐点在哪里呢? 这是一个阶梯式增加的场景,拐点在第二个压力阶梯上就出现了,因为响应时间增加了,tps增加的却不多,在第三个阶段时,tps增加的就更少了,响应时间也在不断增加,所以性能瓶颈在加剧,越往后越明显【tps的增长,…