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

【数据结构题目】循环队列,以及队列实现栈的模拟

前言:

🌟🌟Hello家人们,这期讲解数据结构队列的基础知识,希望你能帮到屏幕前的你。

📚️上期博客在这里:http://t.csdnimg.cn/oOkvk

📚️感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客

                                                     那么正片开始~~~🎬🎬🎬

目录

📚️1.循环队列 

       🎥1.1引言:

       🎥1.2什么是循环队列

         🎥1.3循环队列的下标表示

       🎥1.4代码实现

1.实现构造函数:

2.插入元素:

3.删除元素:

4.输出对头元素,队尾元素:

5.判断队列状态:

📚️2.运用队列完成栈的模拟

     🎥1.1引言:

     🎥1.2思路:

      🎥1.3代码实现:

1.初始化两个队列以及状态判断

2.入栈模拟

3.出栈模拟:

4.输出栈顶数据:

📚️ 3.结束语


📚️1.循环队列 

       🎥1.1引言:

💡💡接着上期讲解,我们知道在用数组完成队列的模拟时,发现当出队列时会造成空间的浪费,因为头索引无法直接回到前面,就算通过设置到0号索引,但是会出现数组不连续的情况,所以这种情况下,数组只能使用一次

~~~那么接下来接引出一个结构,叫做循环队列 。

       🎥1.2什么是循环队列

图片如下:

循环队列,顾名思义就是数组组成了一个圈,开始时队数组的头索引和为索引都在一个位置下。

         🎥1.3循环队列的下标表示

       在表示循环队列下标时,不能简单通过索引加一,如果数组最大索引为7,那么加一就会越界,此时就要通过取余的思想。

例如:当最大索引为7,我们希望下一个索引为0,那么就有(索引+1)%数组的长度就等于下一个索引 

       🎥1.4代码实现

1.实现构造函数:
class MyCircularQueue {private int elem[];private int front;private int rear;public MyCircularQueue(int k) {this.elem=new int[k+1];}

🌟🌟注意:小编这里k+1是因为为了空一格位置没有数据,目的是为了方便判断数组是否为空或者满,如果不预留一个位置,当front==rear时,不知道是空了还是满了。

2.插入元素:
 public boolean enQueue(int value) {if(isFull()){return false;}elem[rear]=value;rear=(rear+1)%elem.length;return true;}

       🌟🌟在插入元素之前要判断队列是否为空,然后再在队尾插入元素,尾部索引加一。上述所示索引的变化为rear=(rear+1)%elem.length;

3.删除元素:
public boolean deQueue() {if(isEmpty()){return false;}front=(front+1)%elem.length;return true;}

       🌟🌟在删除元素之前判断队列是否为空,删除就是头指针往后移,实际没有删除元素,但是再次使用这个空间时,输入数据实际是将之前的数据覆盖了

4.输出对头元素,队尾元素:
public int Front() {if(isEmpty()){return -1;}return elem[front];}public int Rear() {if(isEmpty()){return -1;}int index= (rear==0)?elem.length-1:rear-1;return elem[index];}

       🌟🌟队头元素在判断队列状态后直接返回,在输出队尾元素时,这里我们是舍弃了0索引,所以当rear=0时就表示队列满了(在不出队列的情况下),然后输出0索引前一个索引即可。

5.判断队列状态:
public boolean isEmpty() {if(front==rear){return true;}return false;}public boolean isFull() {if((rear+1)%this.elem.length==front){return true;}return false;}

如图:

此时队列为空;即front==rear;

此时队列为满我们设此时rear所指为0下标,0下标就是我们预留的空位

所以就是当(rear+1)%elem.length==front队列为满。

📚️2.运用队列完成栈的模拟

     🎥1.1引言:

💡💡在此之前我们知道队列是先进先出,栈是先进后出,所以在队列实现栈时,我们不可能用一个队列实现栈,所以这里我们就要运用两个队列

     🎥1.2思路:

      💡💡如上图,我们将要输出的元素,即最后一个元素之前的所以元素传给空队列,然后输出5后,queue1又变成了空队列,然后要输出4就将之前的元素传给queue1,输出4后queue2又变成了空队列循环以此。

      🎥1.3代码实现:

1.初始化两个队列以及状态判断
class MyStack {Queue<Integer> queue1;Queue<Integer> queue2;public MyStack() {this.queue1 = new LinkedList<>();this.queue2 = new LinkedList<>();}public boolean empty() {if (queue2.isEmpty() && queue1.isEmpty()) {return true;}return false;}

     🌟🌟首先初始化两个队列,并进行非空判断。

2.入栈模拟
public void push(int x) {if (empty()) {queue1.offer(x);} else {if (queue1.isEmpty()) {queue2.offer(x);} else {queue1.offer(x);}}}

      🌟🌟在第一次加入数据时,我们规定先加入一个数据在queue1然后再次加入数据时要判断那个不为空就加入那个队列。

3.出栈模拟:
 public int pop() {if (queue2.isEmpty()) {while (queue1.size() > 1) {int ret = queue1.poll();queue2.offer(ret);}return queue1.poll();} else {while (queue2.size() > 1) {int ret = queue2.poll();queue1.offer(ret);}return queue2.poll();}}

       🌟🌟那个不为空就将那个队列的数组的size-1个数据传给另一个队列,然后输出队列的唯一一个数据就是栈顶元素

4.输出栈顶数据:
 public int top() {if (queue2.isEmpty()) {while (queue1.size() > 1) {int ret = queue1.poll();queue2.offer(ret);}int ret = queue1.peek();queue1.poll();queue2.offer(ret);return ret;} else {while (queue2.size() > 1) {int ret = queue2.poll();queue1.offer(ret);}int ret = queue2.peek();queue2.poll();queue1.offer(ret);return ret;}}

🌟🌟这里和出栈其实差别不大,最要时在进行数据传递给另一个队列后,要输出最后一个数据,并且完成后要将这个数据继续给另一个队列

例如:queue1传给queue2(size-1)个元素后输出queue的最后一个元素后,再将这个元素继续传给queue2,这样不会改变队列的数据。并做到了输出栈顶元素的操作。

 📚️3.结束语

以上两个题目均来自力扣:

循环队列:. - 力扣(LeetCode)

队列实现栈的模拟:. - 力扣(LeetCode)

 🌅🌅🌅大家有什么问题,可以在评论区指正,期待各位uu的发言。


                           💪💪💪以上就是本期内容了, 感兴趣的话,就关注一下小编吧。

                                             😊😊  期待你的关注~~~

相关文章:

【数据结构题目】循环队列,以及队列实现栈的模拟

前言&#xff1a; &#x1f31f;&#x1f31f;Hello家人们&#xff0c;这期讲解数据结构队列的基础知识&#xff0c;希望你能帮到屏幕前的你。 &#x1f4da;️上期博客在这里&#xff1a;http://t.csdnimg.cn/oOkvk &#x1f4da;️感兴趣的小伙伴看一看小编主页&#xff1a;G…...

大数据CloudSim应用实践:基于CloudSimExamle6.java修改(超详细教程)

文章目录 大数据CloudSim应用实践&#xff1a;基于CloudSimExamle6.java修改&#xff08;超详细教程&#xff09;1 准备1.1 操作系统1.2 软件 2 安装JDK2.1 安装JDK 3 配置Eclipse集成开发环境3.1 启动Eclipse3.2 配置Java运行时环境JRE 4 创建Java项目4.1 创建项目4.2 导入jar…...

完美解决浏览器的输入框自动填入时,黄色背景问题,以及图标被遮住问题(最新)

用图说话↓↓↓ 首先用代码解决黄色背景问题&#xff0c;box-shadow颜色设置透明即可&#xff0c;延时渲染时间可修改为更久 :deep(input:-webkit-autofill) {box-shadow: 0 0 0 1000px transparent !important;/* 浏览器记住密码的底色的颜色 */-webkit-text-fill-color: #f…...

C 语言中的头文件

1、C 语言中 include <> 与include “” 的区别? #include < > 引用的是编译器的类库路径里面的头文件。 #include " " 引用的是你程序目录的相对路径中的头文件&#xff0c;如果在程序目录没有找到引用的头文件则到编译器的类库路径的目录下找该头文…...

数据结构复杂度

文章目录 一. 数据结构前言1.1 数据结构1.2 算法 二. 算法效率2.1 时间复杂度2.1.1 T(N)函数式2.1.2 大O的渐进表示法 2.2 空间复杂度2.3 常见复杂度比较 2.3 复杂度算法题1.2. 一. 数据结构前言 1.1 数据结构 什么是数据结构呢&#xff1f;打开一个人的主页&#xff0c;有很…...

MySQL基础篇

一、MySQL概述 MySQL是一个数据库管理系统&#xff0c;由瑞典MySQL AB公司开发&#xff0c;属于Oracle推出的产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在WEB应用方面&#xff0c;MySQL是最好的RDBMS&#xff08;关系数据库管理系统&#xff09; &#xff0c…...

详解C++中的四种强制转换reinterpret_cast / const_cast / static_cast / dynamic_cast

目录 1.reinterpret_cast 2.const_cast 3.static_cast 4.dynamic_cast 例子 C中存在四种强制转换&#xff1a;reinterpret_cast / const_cast / static_cast / dynamic_cast 1.reinterpret_cast 格式 &#xff1a; reinterpret_cast<type_id> (expression) 用于类型…...

Word中加载Mathtype后粘贴复制快捷键(Ctrl+C/V)不能使用

操作环境 windows 11操作系统 word版本2021 mathtype版本7.4 这个问题只出现在word中&#xff0c;在excel和ppt中都不存在这个问题&#xff0c;而且之前在另一台电脑中使用word2016版本并没有这种问题的&#xff0c;然后网上搜了一下有不少人有这种问题&#xff0c;word直接取…...

Linux硬件-bios

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 在Linux的服务器领域&#xff0c;我们能接触的到硬件其实挺多的&#xff0c;但是在这些硬件我们根据我们的需要去使用的时候…...

VisionPro二次开发学习笔记12-使用CogToolGroup控件进行图像检测

本示例演示了如何通过图像数据库使用 CogImageFileTool&#xff0c;并将其放入 CogToolGroup 中&#xff0c;对于数据库中的每个图像运行一次检测. 当用户按下 RunTest 按钮时&#xff0c;程序执行以下操作&#xff1a; 如果工具组中没有 CogImageFileTools&#xff0c;它将显…...

mfc140u.dll丢失的科学修复手段,简单又方便的mfc140u.dll修复

遇到 "缺失 mfc140u.dll 文件" 的提示时可能会让你疑惑&#xff0c;但不用担心。这个文件是 Microsoft Visual C 2015 的重要组成部分&#xff0c;对运行特定程序非常关键。幸运的是&#xff0c;解决这一问题并不难。本文将简单指导你如何恢复或修复丢失的 mfc140u.d…...

RabbitMQ、Kafka对比(超详细),Kafka、RabbitMQ、RocketMQ的区别

文章目录 一、kafka和rabbitmq全面对比分析1.1 简介1.2 kafka和rabbitmq全面对比分析1.3 影响因素 二、RabbitMQ、Kafka主要区别2.1 详解/主要区别2.1.1 设计目标和适用场景2.1.2 架构模型方面2.1.3 吞吐量和性能2.1.4 消息存储和持久化2.1.5 消息传递保证2.1.6 集群负载均衡方…...

【案例35】销售订单公式问题导致系统宕机

问题现象 经过顾问反馈&#xff0c;发现系统现在出现卡顿&#xff0c;NCC一直在转圈。 问题分析 远程排查&#xff0c;发现在服务器从机上defalut-7发生了内存溢出&#xff0c;宕机。 生成了宕机日志。分析结果如下&#xff1a; 销售订单相关操作&#xff0c;vo太多了导致…...

编程-设计模式 4:建造者模式

设计模式 4&#xff1a;建造者模式 定义与目的 定义&#xff1a;建造者模式将一个复杂对象的构建与其表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。目的&#xff1a;该模式主要用于创建复杂对象时&#xff0c;这些对象的创建过程可能涉及多个步骤&#xff0c;…...

百度文心一言API调用,千帆大模型获取API Key和API Secret图解

百度文心一言大模型调用教程&#xff0c;获取文心一言API Key和API Secret的方法&#xff0c;码笔记mabiji.com告诉大家在百度智能云的千帆大模型平台创建应用&#xff0c;即可获取文心一言的API Key和API Secret&#xff0c;详细流程如下&#xff1a; 1、在百度智能云的千帆大…...

kafka下载|安装

1、下载kafka https://kafka.apache.org/downloads 2、安装kafka 解压下载的kafka安装包即可 tar -xvf kafka_2.13-3.7.0.tgz -C /usr/local/3、查看kafka目录 bin目录&#xff1a;存放了脚本 config目录&#xff1a;主要存放了配置文件...

贪心算法part03

134 加油站 在一条环路上有 N 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。 如果你可以绕环路行…...

以树莓集团的视角:探索AI技术如何重塑数字媒体产业发展

在科技日新月异的今天&#xff0c;AI技术如同一股不可阻挡的潮流&#xff0c;正深刻改变着我们的世界&#xff0c;尤其是数字媒体产业发展。作为数字产业生态链的杰出建设者&#xff0c;树莓集团始终站在时代前沿&#xff0c;积极探索AI技术如何为数字媒体产业注入新活力。 在树…...

package.json的 和 的区别,以及|| 和 | 的区别

在 package.json 文件中的 scripts 字段里&#xff0c;&& 和 & 用于连接不同的命令&#xff0c;它们的区别在于命令执行的方式和效果&#xff1a; &&&#xff1a; 用于串联两个命令&#xff0c;第一个命令成功&#xff08;退出码为 0&#xff09;后&#x…...

Wireshark_DNS_v7.0

Wireshark_DNS_v7.0 一、 nslookup 前置 nslookup 是一个网络命令行工具&#xff0c;用于查询域名系统&#xff08;DNS&#xff09;中的域名解析记录。通过使用 nslookup&#xff0c;你可以获取某个域名的IP地址&#xff0c;或者获取与某个IP地址关联的域名信息。 查看域名…...

无机布防火卷帘门价格怎么算?按尺寸定制,按需报价

无机布防火卷帘门作为建筑防火分区的核心设备&#xff0c;价格一直是工程采购的关注重点。很多用户在询价时&#xff0c;会发现不同厂家的报价差异较大&#xff0c;这是因为无机布防火卷帘门的价格并非按统一单价计算&#xff0c;而是完全根据项目的实际需求定制化核算。 &…...

智能手机相机光谱特性测量与多光谱成像技术

1. 智能手机相机光谱特性测量基础智能手机相机的光谱灵敏度函数(Spectral Sensitivity Function, SSF)和透射率函数是计算摄影领域的核心参数&#xff0c;它们决定了设备对光信号的响应特性。准确获取这些参数对色彩还原、光谱重建和白平衡校准等任务至关重要。1.1 光谱灵敏度函…...

别再盲跑了!手把手教你用Arduino Zero在IDE 2.0里设置断点单步调试

告别盲跑时代&#xff1a;Arduino Zero与IDE 2.0的源码级调试实战指南 当你的Arduino项目逻辑越来越复杂&#xff0c;仅靠串口打印调试就像在迷宫里摸黑前行——直到遇见Arduino Zero与IDE 2.0的调试组合。本文将揭示如何用这套工具实现 源码级精准调试 &#xff0c;即使你手…...

PlayAI语音合成质量到底如何?12款竞品横向对比+5项MOS/LSD/STOI硬指标揭榜

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;PlayAI语音合成质量评测报告 PlayAI 是一款面向开发者与内容创作者的实时语音合成&#xff08;TTS&#xff09;服务&#xff0c;支持多语种、多音色及情感可控输出。本报告基于客观可复现的评测流程&#xff0…...

GitLab External Wiki代理权限绕过漏洞深度解析

1. 这个漏洞不是“修个补丁”就能完事的——它暴露的是 GitLab 权限模型里一个被长期忽视的逻辑断层GitLab 安全漏洞 CVE-2025-2614&#xff0c;光看编号容易误以为是又一个常规的越权或 XSS 类型漏洞。但我在实际复现和审计过程中发现&#xff0c;它根本不是配置疏漏或代码拼写…...

FeHelper前端助手:30+开发工具集,让你的浏览器变身效率神器

FeHelper前端助手&#xff1a;30开发工具集&#xff0c;让你的浏览器变身效率神器 【免费下载链接】FeHelper &#x1f60d;FeHelper--Web前端助手&#xff08;Awesome&#xff01;Chrome & Firefox & MS-Edge Extension, All in one Toolbox!&#xff09; 项目地址:…...

使用TaotokenCLI工具一键配置开发环境中的API密钥

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用Taotoken CLI工具一键配置开发环境中的API密钥 在团队协作或个人开发中&#xff0c;为每个项目或成员手动配置大模型API密钥和…...

别急着扔!12年老ThinkPad X230升级SSD和内存后,Win10流畅得像新电脑

12年老ThinkPad X230重生指南&#xff1a;极简升级打造流畅办公利器每次打开抽屉看到那台积灰的ThinkPad X230&#xff0c;总有种说不出的情感。这款2012年问世的经典商务本&#xff0c;曾陪伴无数人度过加班到凌晨的夜晚。如今性能确实有些力不从心&#xff0c;但直接丢弃又觉…...

从开题到定稿零焦虑:okbiye AI 论文写作,帮你把毕业季的 “大山” 变成坦途

okbiye-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPT毕业论文 - Okbiye智能写作https://www.okbiye.com/ai/bylw 毕业季的深夜&#xff0c;宿舍台灯下的屏幕亮着刺眼的光&#xff0c;文档里的字数停留在三位数&#xff0c;而 deadline 正一天天逼近。你是…...

基于随机森林的低成本传感器机器学习校准实践指南

1. 项目概述&#xff1a;当低成本传感器遇上机器学习校准在物联网和智能感知系统铺天盖地的今天&#xff0c;低成本传感器几乎无处不在。从监测办公室的空气质量&#xff0c;到追踪城市街道的噪音污染&#xff0c;再到农业大棚里的温湿度控制&#xff0c;这些价格亲民的“小眼睛…...