当前位置: 首页 > 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地址关联的域名信息。 查看域名…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...