当前位置: 首页 > news >正文

【Leedcode】栈和队列必备的面试题(第四期)

【Leedcode】栈和队列必备的面试题(第四期)


文章目录

  • 【Leedcode】栈和队列必备的面试题(第四期)
  • 一、题目
  • 二、思路+图解
    • 1.声明结构体
    • 2.循环链表开辟动态结构体空间
    • 3.向循环队列插入一个元素
    • 4.循环队列中删除一个元素
    • 5. 从队首获取元素
    • 6. 获取队尾元素
    • 7.检查循环队列是否为空
    • 8.检查循环队列是否已满
    • 9.释放循环链表
  • 三、可能遇到的问题
  • 四、整体源代码
  • 总结


一、题目

Leedcode链接


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

这几个接口使我们需要实现的我会一 一实现并讲解!


二、思路+图解

1.声明结构体

在这里插入图片描述

代码如下(示例):

typedef struct {int *a;int front;int tail;int k;
} MyCircularQueue;

2.循环链表开辟动态结构体空间

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


代码如下(示例):

MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* cp = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));cp->a = (int*)malloc(sizeof(int)*(k+1));cp->front = cp->tail = 0;cp->k = k;return cp;
}

3.向循环队列插入一个元素

在这里插入图片描述


在这里插入图片描述


代码如下(示例):

bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if(myCircularQueueIsFull(obj)){return false;}obj->a[obj->tail] = value;obj->tail++;obj->tail %= (obj->k+1);return true;
}

4.循环队列中删除一个元素

直接++obj->front即可,要注意:front走的是循环链表,可以:obj->front %= (obj->k+1);
在这里插入图片描述


在这里插入图片描述


代码如下(示例):

bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)){return false;}obj->front++;obj->front %= (obj->k+1);return true;
}

5. 从队首获取元素

直接返回 obj->a[obj->front],别忘了题目要求找不到返回 -1

代码如下(示例):

int myCircularQueueFront(MyCircularQueue* obj) {//取首元素数据if(myCircularQueueIsEmpty(obj)){return -1;}return obj->a[obj->front];
}

6. 获取队尾元素

在这里插入图片描述


![在这里插入图片描述](https://img-blog.csdnimg.cn/2ae4e685ecae47c3aacbd8cbc565b768.pn


![在这里插入图片描述](https://img-blog.csdnimg.cn/0822c4a4cf264bd08c279c80f2b705fd.png


代码如下(示例):

int myCircularQueueRear(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)){return -1;}if(obj->tail == 0){return obj->a[obj->k];}else{return obj->a[obj->tail-1];}
}

7.检查循环队列是否为空

剩下的几个接口相对来说很简单,直接上代码!

代码如下(示例):

bool myCircularQueueIsEmpty(MyCircularQueue* obj) 
{return obj->front == obj->tail;
}

8.检查循环队列是否已满

不论是判空还是判满,都要开 k+1 个空间,这是这道题的精髓!!!


在这里插入图片描述

代码如下(示例):

bool myCircularQueueIsFull(MyCircularQueue* obj) 
{return (obj->tail+1)%(obj->k+1) == obj->front;
}

9.释放循环链表

两次依次释放空间即可

代码如下(示例):

void myCircularQueueFree(MyCircularQueue* obj) 
{free(obj->a);free(obj);
}

三、可能遇到的问题

此时我们提交代码,会出现以下问题!
在这里插入图片描述


这里表明我们在接口中定义的两个函数 myCircularQueueIsEmptymyCircularQueueIsFull 需要声明一下!
在这里插入图片描述


四、整体源代码

代码如下(示例):

//声明结构体
typedef struct {int *a;int front;int tail;int k;
} MyCircularQueue;bool myCircularQueueIsEmpty(MyCircularQueue* obj);
bool myCircularQueueIsFull(MyCircularQueue* obj);MyCircularQueue* myCircularQueueCreate(int k) {//开辟动态结构体空间,用指针p维护MyCircularQueue* cp = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));//一次性动态开辟好数组cp->a = (int*)malloc(sizeof(int)*(k+1));//初始化值cp->front = cp->tail = 0;cp->k = k;//函数要求返回指针  指针的类型是MyCircularQueuereturn cp;
}bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {//如果数组是满的返回 falseif(myCircularQueueIsFull(obj))//注意在这里调用了下面的自定义函数 所以要在前面提前声明函数{return false;}//如果数组没满来到这里 进行导入输入 并修改tail的值 obj->a[obj->tail] = value;obj->tail++;obj->tail %= (obj->k+1);return true;
}bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))//注意在这里调用了下面的自定义函数 所以要在前面提前声明函数{return false;}obj->front++;obj->front %= (obj->k+1);return true;
}int myCircularQueueFront(MyCircularQueue* obj) {//取首元素数据if(myCircularQueueIsEmpty(obj)){return -1;}return obj->a[obj->front];
}int myCircularQueueRear(MyCircularQueue* obj) {//取尾元素数据if(myCircularQueueIsEmpty(obj)){//当数组为空 则返回-1return -1;}//数组不为空来到这 tail指向的地址的值肯定是空的 所以需要找tail后面的一个元素(tail-1)//但是由于是环形数组当tail是0下标的时候 0-1 = -1  可实际情况我们是要找数组的最后一个下标 数组最后一个下标不可能是-1//那么特殊情况 特殊对待做if else判断if(obj->tail == 0){return obj->a[obj->k];}else{return obj->a[obj->tail-1];}//其实下面还有一种运算方法  套用tail=0 我们可以发现 i就等于了数组最后一个元素的下标k //因为数组实质开辟空间是开辟的k+1个元素 那么k就是数组的尾元素下标//int i = (obj->tail+obj->k)%(obj->k+1);//return obj->a[i];
}bool myCircularQueueIsEmpty(MyCircularQueue* obj) {//判断数组是否为空return obj->front == obj->tail;
}bool myCircularQueueIsFull(MyCircularQueue* obj) {//判断数组是否为满return (obj->tail+1)%(obj->k+1) == obj->front;
}void myCircularQueueFree(MyCircularQueue* obj) {//依次释放空间free(obj->a);free(obj);
}/*** Your MyCircularQueue struct will be instantiated and called as such:* MyCircularQueue* obj = myCircularQueueCreate(k);* bool param_1 = myCircularQueueEnQueue(obj, value);* bool param_2 = myCircularQueueDeQueue(obj);* int param_3 = myCircularQueueFront(obj);* int param_4 = myCircularQueueRear(obj);* bool param_5 = myCircularQueueIsEmpty(obj);* bool param_6 = myCircularQueueIsFull(obj);* myCircularQueueFree(obj);
*/

在这里插入图片描述


总结

以上就是今天要讲的内容,本文介绍了【Leedcode】中栈和队列必备的面试题(第四期)
如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!
在这里插入图片描述

相关文章:

【Leedcode】栈和队列必备的面试题(第四期)

【Leedcode】栈和队列必备的面试题(第四期) 文章目录【Leedcode】栈和队列必备的面试题(第四期)一、题目二、思路图解1.声明结构体2.循环链表开辟动态结构体空间3.向循环队列插入一个元素4.循环队列中删除一个元素5. 从队首获取元…...

Windows Server 2016搭建文件服务器

1:进入系统在服务器管理器仪表盘中添加角色和功能。 2:下一步。 3:继续下一步。 4:下一步。 5:勾选Web服务器(IIS) 6:添加功能。 7:下一步。 8:下一步。 9:下一步。 10&a…...

零基础学SQL(十一、视图)

目录 前置建表 一、什么是视图 二、为什么使用视图 三、视图的规则和限制 四、视图的增删改查 五、视图数据的更新 前置建表 CREATE TABLE student (id int NOT NULL AUTO_INCREMENT COMMENT 主键,code varchar(255) NOT NULL COMMENT 学号,name varchar(255) DEFAULT NUL…...

web,h5海康视频接入监控视频流记录三(后台node取流)

前端vue,接入ws视频播放 云台控制 ,回放预览,都是需要调对应的海康接口。相当于,点击时,请求后台写好的接口,接口再去请求海康的接口 调用云台控制是,操作一次,不会自己停止&#x…...

网络安全从入门到精通:30天速成教程到底有多狠?你能坚持下来么?

毫无疑问,网络安全是当下最具潜力的编程方向之一。对于许多未曾涉足计算机编程的领域「小白」来说,深入地掌握网络安全看似是一件十分困难的事。至于一个月能不能学会网络安全,这个要看个人,对于时间管理不是很高的,肯…...

世界上最流行的编程语言,用户数超过Python,Java,JavaScript,C的总和!

世界上最流行的编程语言是什么? Python? Java? JavaScript? C?都不是,是Excel!外媒估计,全球有12亿人使用微软的Office套件,其中估计有7.5亿人使用Excel!可是Excel不就是能写点儿公式&#x…...

杂谈:created中两次数据修改,会触发几次页面更新?

面试题&#xff1a;created生命周期中两次修改数据&#xff0c;会触发几次页面更新&#xff1f; 一、同步的 先举个简单的同步的例子&#xff1a; new Vue({el: "#app",template: <div><div>{{count}}</div></div>,data() {return {count…...

原生JS实现拖拽排序

拖拽&#xff08;这两个字看了几遍已经不认识了&#xff09; 说到拖拽&#xff0c;应用场景不可谓不多。无论是打开电脑还是手机&#xff0c;第一眼望去的界面都是可拖拽的&#xff0c;靠拖拽实现APP或者应用的重新布局&#xff0c;或者拖拽文件进行操作文件。 先看效果图&am…...

Coredump-N: corrupted double-linked list

文章目录 问题安装debuginfo之后分析参数确定确定代码逻辑解决问题 今天碰到一例: #0 0xf7f43129 in __kernel_vsyscall () #1 0xf6942b16 in raise () from /lib/libc.so.6 #2 0xf6928e64 in abort () from /lib/libc.so.6 #3 0xf6986e8c in __libc_message () from /lib/li…...

5个好用的视频素材网站

推荐五个高质量视频素材网站&#xff0c;免费、可商用&#xff0c;赶紧收藏起来&#xff01; 1、菜鸟图库 视频素材下载_mp4视频大全 - 菜鸟图库 网站素材非常丰富&#xff0c;有平面、UI、电商、办公、视频、音频等相关素材&#xff0c;视频素材质量很高&#xff0c;全部都是…...

使用码匠连接一切|二

目录 Elasticsearch Oracle ClickHouse DynamoDB CouchDB 关于码匠 作为一款面向开发者的低代码平台&#xff0c;码匠提供了丰富的数据连接能力&#xff0c;能帮助用户快速、轻松地连接和集成多种数据源&#xff0c;包括关系型数据库、非关系型数据库、API 等。平台提供了…...

3.1.1 表的相关设计

文章目录1.表中实体与实体对应的关系2.实际案例分析3.表的实际创建4.总结1.表中实体与实体对应的关系 一对多 如一个班级对应多名学生&#xff0c;一个客户拥有多个订单等这种类型表的建表要遵循主外键关系原则&#xff0c;即在从表创建一个字段&#xff0c;此字段作为外键指向…...

Vue3 企业级项目实战:认识 Spring Boot

Vue3 企业级项目实战 - 程序员十三 - 掘金小册Vue3 Element Plus Spring Boot 企业级项目开发&#xff0c;升职加薪&#xff0c;快人一步。。「Vue3 企业级项目实战」由程序员十三撰写&#xff0c;2744人购买https://s.juejin.cn/ds/S2RkR9F/ 越来越流行的 Spring Boot Spr…...

Swagger2实现配置Header请求头

效果 实现 大家使用swagger肯定知道在代码中会写一个 SwaggerConfig 配置类&#xff0c;如果没有这个类swagger指定也用不起来&#xff0c;所以在swagger中配置请求头也是在这个 SwaggerConfig 中操作。 1、要实现配置请求头在配置swagger的Docket的bean实例中添加一个 globa…...

4-1 SpringCloud快速开发入门:RestTemplate类详细解读

RestTemplate类详细解读 RestTemplate 的 GET 请求 Get 请求可以有两种方式&#xff1a; 第一种&#xff1a;getForEntity 该方法返回一个 ResponseEntity对象&#xff0c;ResponseEntity是 Spring 对 HTTP 请求响应的封装&#xff0c;包括了几个重要的元素&#xff0c;比如响…...

【IDEA】【工具】幸福感UP!开发常用的工具 插件/网站/软件

IDEA 插件 CodeGlance Pro —— 代码地图 CodeGlance是一款非常好用的代码地图插件&#xff0c;可以在代码编辑区的右侧生成一个竖向可拖动的代码缩略区&#xff0c;可以快速定位代码的同时&#xff0c;并且提供放大镜功能。 使用:可以通过Settings—>Other Settings—&g…...

【蓝桥杯集训·每日一题】AcWing 1562. 微博转发

文章目录一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解三、知识风暴宽搜BFS一、题目 1、原题链接 1562. 微博转发 2、题目描述 微博被称为中文版的 Twitter。 微博上的用户既可能有很多关注者&#xff0c;也可能关注很多其他用户。 因此&am…...

[busybox] busybox生成一个最精简rootfs(下)

书接上回&#xff1a;[busybox] busybox生成一个最精简rootfs(上) 本篇介绍几个rootfs中用到的“不是那么重要的”几个文件。 9 /etc/shadow 和 /etc/passwd 曾经&#xff0c;/etc/passwd 文件用于存储独立 Linux 系统中的所有登录信息。 后来&#xff0c;由于以下原因&…...

Java奠基】运算符的讲解与使用

目录 运算符与表达式的使用 算术运算符 隐式转换与强制转换 自增自减运算符 赋值运算符 关系运算符 逻辑运算符 三元运算符 运算符与表达式的使用 运算符是指&#xff1a;对字面量或者变量进行操作的符号。 表达式是指&#xff1a;用运算符把字面量或者变量连接起来&…...

开发一个会员管理系统

背景 由于现在公司内客户量剧增&#xff0c; 简单的靠电话及笔记本记录&#xff0c;来维护客户有些困难&#xff0c;但又不想去花钱购买那些专业版的会员管理系统&#xff0c;只能自己动手撸一个相对简易的会员系统来使用了。 开发语言及使用技术 后端&#xff1a;java、mys…...

ComfyUI-Impact-Pack深度解析:从AI图像模糊到专业级细节增强的完整解决方案

ComfyUI-Impact-Pack深度解析&#xff1a;从AI图像模糊到专业级细节增强的完整解决方案 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. …...

【管理科学】【财务领域】【社会科学】人的需求来源和由需求诞生的企业/业务/行业及其上游产业链/中游产业链/下游产业链的所有内容03

编号 类型 (核心功能) 人的需求类型 (对应场景) 人需求得以满足的信息产品/实体产品/制造加工工具/原材料/其他 由需求诞生的企业/业务/行业及其上游产业链/中工产业链/下游产业链的所有内容及多学科数学建模方程式​ /时序数学方程式及货币来源及业务财务模型 流动时序方程…...

如何高效下载网易云音乐无损FLAC:完整指南与实战技巧

如何高效下载网易云音乐无损FLAC&#xff1a;完整指南与实战技巧 【免费下载链接】NeteaseCloudMusicFlac 根据网易云音乐的歌单, 下载flac无损音乐到本地.。 项目地址: https://gitcode.com/gh_mirrors/nete/NeteaseCloudMusicFlac 想要一键下载网易云音乐歌单中的无损…...

10分钟搞定:XUnity.AutoTranslator游戏翻译插件终极使用指南

10分钟搞定&#xff1a;XUnity.AutoTranslator游戏翻译插件终极使用指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为外语游戏看不懂而烦恼吗&#xff1f;XUnity.AutoTranslator正是你需要的游戏…...

Skill Library:AI智能体技能库的模块化设计与工程实践

1. 项目概述&#xff1a;一个为AI智能体打造的“技能武器库”如果你和我一样&#xff0c;每天都在和Claude、ChatGPT、Cursor这些AI工具打交道&#xff0c;那你肯定也经历过这样的时刻&#xff1a;想让AI帮你写个复杂的SQL查询、设计一个微服务架构&#xff0c;或者起草一份产品…...

Butlerclaw:OpenClaw AI Agent的图形化桌面管理工具

1. 项目概述如果你和我一样&#xff0c;对AI Agent的潜力感到兴奋&#xff0c;但又对OpenClaw这类框架复杂的安装、配置和日常管理感到头疼&#xff0c;那么Butlerclaw的出现&#xff0c;绝对是一个值得庆祝的消息。简单来说&#xff0c;Butlerclaw是一个为OpenClaw量身打造的“…...

电容转换技术突破:电源小型化与高效能设计

1. 电源小型化革命&#xff1a;电容转换技术的突破想象一下&#xff0c;当你拆开最新款的智能手表&#xff0c;发现内部电源模块只占用了指甲盖大小的空间&#xff1b;或者当数据中心机架里的服务器&#xff0c;突然腾出了30%的空间用于增加计算单元。这正是德州仪器&#xff0…...

如何快速上手Podgrab:5分钟搭建个人播客下载中心完整指南

如何快速上手Podgrab&#xff1a;5分钟搭建个人播客下载中心完整指南 【免费下载链接】podgrab A self-hosted podcast manager/downloader/archiver tool to download podcast episodes as soon as they become live with an integrated player. 项目地址: https://gitcode.…...

解决Modelsim SE 10.6c仿真Vivado 2019乘法器IP核的“.vhd only”难题(附完整脚本)

解决Modelsim SE 10.6c仿真Vivado 2019乘法器IP核的“.vhd only”难题&#xff08;附完整脚本&#xff09; 在FPGA设计流程中&#xff0c;Xilinx Vivado与Mentor Modelsim的组合是许多工程师的首选工具链。但当Vivado 2019生成的乘法器IP核仅提供VHDL接口文件(.vhd)时&#xff…...

004、TinyML技术栈全景图:从模型到部署

004 TinyML技术栈全景图:从模型到部署 去年冬天调试一个智能门磁项目,板子是STM32L4,Flash只有256KB。模型在PC上跑F1值0.97,烧进去直接死机——不是推理结果不对,是内存分配直接溢出。我盯着map文件看了三个小时,最后发现是TensorFlow Lite Micro的arena大小设错了,多…...