【数据结构】栈和队列OJ面试题

20. 有效的括号 - 力扣(LeetCode)

思路:由于C语言没有栈的接口,所以我们需要自己造一个“模子”。我们直接copy之前的实现的栈的接口就可以了(可以看我之前的博客【数据结构】栈和队列-CSDN博客copy接口),同时要注意要将typedef的STDataType从int类型改成char类型。在此之后,依次取出字符串中的字符判断,如果是左括号,则入栈。如果是右括号,则依次和栈顶字符去进行配对,然后出栈。再进行判断,配对则返回false,否则判断下一个字符。再while循环结束后还要再一次判空,排除栈中还有字符未进行判断的情况。

225. 用队列实现栈 - 力扣(LeetCode)

思路:由于C语言没有队列的接口,所以同样也需要我们自己造出一个“模子”来。再【数据结构】栈和队列-CSDN博客这篇博客中同样也有关于队列的接口,再这里我们直接copy一下队列的接口。

关于用队列实现栈,我们的思路是这样的,首先,创建出两个队列,一个队列用来在出栈时拷贝,一个队列用来在出栈时接受拷贝,所以这就要求一个队列必须是空的,而另一个队列的功能就是扮演栈的角色(因为队列出入数据是先进先出的,栈出入数据是先进后出的,所以在数据出栈的时候,只能用队列的拷贝来实现栈的数据出栈)。其他接口直接使用队列的接口就基本可以完成。

另外,要注意的是,在最后销毁栈的时候,需要先销毁两个队列再销毁栈,以免出现有野指针的情况。

 

232. 用栈实现队列 - 力扣(LeetCode)

思路:这道题同样需要用之前写的栈造一个“模子”。在解决这道题目时,需要我们创建两个栈去实现(st1用来存放数据,st2用来导数据)。当我们pop数据的时候,需要先将创建好的st1中的数据依次出栈到st2的栈中,然后将st2中的栈顶数据pop掉 ,最后将st2中的数据重新导回到st1中。在实现myQueuePeek(myQueuePeek接口要求我们返回队列开头的元素)接口的时候也是同样的方法,先将st1中的数据导到st2中,只不过接下来不需要pop栈顶元素,只需要记录下栈顶元素,然后再导回st1中,最后再返回记录下的元素就好了。其他的接口用之前实现栈的接口就可以基本解决了。

 

622. 设计循环队列 - 力扣(LeetCode)

思路:在这道题目中,我们采用顺序表的方法来完成。首先需要动态申请一个数组,然后初始化结构体。结构体中的head指向数组中的第一个节点,tail指向数组中最后一个节点的下一个节点,k的意思是数组中一共有k个数据。这里有接口需要我们判空和判满,但是如果就按这种思路写下去的话,我们会发现判空和判满的条件是一样的,都是head==tail。

那么我们应该如何去解决这个问题呢?这里我们有两种解决方案。第一种是在多开一个数组的空间,这样当队列满的时候的判空条件就变成了tail+1==head了,就避免了判空和判满条件一样的情况了。第二种方法是加一个size去判断队列中数据的个数。在此我们采用第一种方法来完成代码。

还需要注意的一个接口是取队尾的接口,这个接口需要取tail前一个结点,但是有一种特殊的情况就是tail是数组中第一个空间,这时候tail在-1的话就会变成-1,而不是指向第5块空间。这是我们可以进行一个判断,如果tail是第一块空间,那么则返回地5块空间的数据,否则返回第tail-1块的空间就可以了。或者我们可以取第((tail-1)+(k+1))%(k+1)个数据就是队列的队尾数据。

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

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

相关文章

BGP基础配置实验

BGP基础配置实验 一、实验拓扑 初始拓扑: 最终拓扑: 二、实验要求及分析 实验要求: 1,R1为AS 100区域;R2、R3、R4为AS 200区域且属于OSPF协议;R5为AS 300区域; 2,每个设备上都有…

全面监控:系统日志分析与记录

全面监控:系统日志记录 系统日志是记录计算机系统各种活动和事件的文件或数据库。它们包含了系统的运行状态、错误信息、警告、用户操作记录等。 系统管理员和软件开发人员经常使用系统日志来诊断问题、监视系统性能和跟踪用户活动。 日志记录通常包括时间戳、事…

I. Integer Reaction

Problem - I - Codeforces 看到最小值最大值,二分答案。 思路:每次二分时开两个集合,分别表示 0 0 0颜色和 1 1 1颜色。如果是 c c c颜色,先将值存入 c c c颜色,之后在 ! c !c !c颜色中找大于等于 m i d − a mid - a…

软件设计师笔记(三)-设计模式和算法设计

本文内容来自笔者学习zst 留下的笔记,都是零碎的要点,查缺补漏,希望大家都能通过,记得加上免费的关注!谢谢!本章主要以下午题出现形式为主! 文章编辑于:2024-5-13 13:43:47 目录 1…

数据分离和混淆矩阵的学习

1.明确意义 通过训练集建立模型的意义是对新的数据进行准确的预测(测试集的准度高才代表good fit); 2.评估流程 3.单单利用准确率accuracy进行模型评估的局限性 模型一:一共1000个数据(分别为900个1和100个0&#x…

Adobe After Effects AE v24.3.0 解锁版 (视频合成及视频特效制作)

Adobe系列软件安装目录 一、Adobe Photoshop PS 25.6.0 解锁版 (最流行的图像设计软件) 二、Adobe Media Encoder ME v24.3.0 解锁版 (视频和音频编码渲染工具) 三、Adobe Premiere Pro v24.3.0 解锁版 (领先的视频编辑软件) 四、Adobe After Effects AE v24.3.0 解锁版 (视…

AI网络爬虫:用kimichat自动批量提取网页内容

首先,在网页中按下F12键,查看定位网页元素: 然后在kimi中输入提示词: 你是一个Python编程专家,要完成一个爬取网页内容的Python脚本,具体步骤如下: 在F盘新建一个Excel文件:提示词…

ubuntu 22.04 安装 RTX 4090 显卡驱动 GPU Driver(PyTorch准备)

文章目录 1. 参考文章2. 检查GPU是Nvidia3. 卸载已有驱动3.1. 命令删除3.2. 老驱动包 4. 官网下载驱动5. 运行5.1. 远程安装关闭交互界面5.2. 运行5.3. 打开交互界面 6. 检测与后续安装 1. 参考文章 https://blog.csdn.net/JineD/article/details/129432308 2. 检查GPU是Nvid…

Typescript 哲学 - ts模块使用最佳实践

ts的作用域 默认是全局(global),这也是为什么在 两个ts文件声明同一个变量报错变量名冲突,解决方法是使某个文件以模块的形式存在(文件顶层使用 export 、import ) In TypeScript, just as in ECMAScript 2…

【软考高项】四十六、项目管理科学计算之运筹学

1、线性规划问题 解题思路: 先把文字转化成图表 最快方式应该是把第一题的4个答案直接代入计算,很快得知X2时利润最大。 A0时,利润5*630 A2时,利润2*25*634 A4时,利润4*23*523 A6时,利润4*2(因为甲的…

【JavaScript超详细的学习笔记-上】JavaScrip超详细的学习笔记,共27部分,12多万字

想要获取笔记的可以点击下面链接获取 JavaScript超详细的学习笔记,点击我获取 一,JavaScript详细笔记 1,基础知识 1-1 基础知识 // 1,标识符命名规则:第一个字母必须是字母,下划线或一个美元符号。不能…

MySQL基础使用指南

难度就是价值所在。大家好,今天给大家分享一下关于MySQL的基础使用,MySQL 是一个流行的关系型数据库管理系统,被广泛应用于各种类型的应用程序开发中。本文中将介绍 MySQL 的基础使用方法,包括创建数据库、创建表格以及进行增删改…

【qt】数值的输入与输出

数值的输入与输出 一.与c中的输入与输出的区别二.QString转数值三.数值转QString1.number()2.asprintf() 四.小项目1.总价和进制2.QSpinBox代替3.QSlider滑动块4.QScrollBar滚动条5.QDial表盘6.QLcdnumber lcd显示 五.总结一下下 一.与c中的输入与输出的区别 在c中我们一般通过…

深入学习指针5,与数组和指针相关的笔试题1(C语言)

前言 Hello,亲爱的小伙伴们,我又来了,,今天呢我们一起来学习一下C语言关于数组和指针的部分经典题目。如果觉得不错的话不要忘了点赞,收藏、关注,你的支持就是我更新的最大动力!! 好&#xff0…

Java入门基础学习笔记22——程序流程控制

程序流程控制:控制程序的执行顺序。 程序有哪些执行顺序? 顺序、分支和循环。 分支结构: if、switch 循环: for、while、do-while 顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码…

防火墙技术基础篇:什么是包过滤技术

什么是防火墙包过滤技术 当数据在网络中传输时,它们被分割成小的单元,称为数据包。防火墙的包过滤是一种基本的网络安全技术,用于检查这些数据包并根据预定义的规则决定是否允许它们通过防火墙。 防火墙包过滤是一种关键的网络安全技术&am…

没有申请域名的情况下,用navicat远程连接我们的服务器的Mysql数据库

我们可以根据公网ip用shell来远程连接 首先我们打开自己买的服务器 例如你看这个,就是我们的公网IP 如果服务器里面没有安装mysql数据库的话,那么我们可以用一个轻量级的docker来安装数据库代替一下 我们用docker弄个轻量级的mysql5.7.36,…

号外!IP SSL证书申请只需十分钟!

IP SSL证书是一种专为IP地址设计的SSL证书,它使得基于IP地址的网站或服务能够实现HTTPS加密,确保数据在传输过程中的安全性和完整性。以下是关于IP SSL证书的一些技术性要点和申请流程概述: 一、IP SSL证书技术要点 1、适用场景&#xff1a…

x264 帧类型决策模块 x264_slicetype_analyse 函数原理分析

======================================================================== ======================================================================== x264帧类型决策 x264 的帧类型决策可以参考:

【Spring】Springmvc学习Ⅲ

# Springmvc学习Ⅲ 文章目录 一、图书管理系统1. 功能1.1 登录前端接口前端代码后端接口后端代码 1.2 图书列表展示步骤:图书类代码mock数据代码控制层调用代码服务层代码(存储除数据库中需要存储的数据) 2. 分层控制2.1 三层架构2.2 代码重…