栈和队列---循环队列
1.循环队列的出现

(1)上面的这个就是一个普通的数据的入队和出队的过程我们正常情况下去实现这个入队和出队的过程,就是这个数据从这个队尾进入,从队头离开,但是这个加入的时候肯定是没有其他的问题的,直接在这个队尾插入数据就可以了,但是在队头把这个数据出队之后,我们想要保持这个队列的完整性,就需要使用循环把这个队列里面的数据向前进行移动,这个是增加了这个方法的时间复杂度;
(2)我们新的方法就是定义两个指针,一个指针就是rear指针,指向这个队列的尾部,一个指针就是front指针,指向这个队列的头部,我们在进行这个数据的入队的时候,我们先让这个rear+1,然后把这个入队的数据放到这个指针指向的位置;
(3)在队头出队的时候,我们只需要把这个front的指针先向后移动,再把这个指针指向位置的元素给删除掉,实际上这个指针向后移动之后,两个指针之间的位置才属于我们的这个队列的范围,我们这个数据也不能称之为删除,而是这个数据不在我们的这个队列里面了,相当于这个数据被“删除了”而已;
(4)但是这个还会出现一个问题,对于一个队列而言,我们在前面删除数据,前面就是空的了,这个时候我们的rear如果不短的入数据,这个指针最后就会指向这个队列的队尾,我们这个时候其实队列的前面还是空的,但是这个时候这块空间已经没有办法使用了,因此我们需要把这个问题解决掉,这个现象我们称为假溢出问题;

(5)解决这个假溢出问题的方法就是我们下面即将介绍的循环队列问题,循环队列就是使用的这个队列的尾指针指向这个队列的头指针,这个头尾项链之后就可以实现我们的这个尾部的数据空间全部占用之后,我们可以向这个队列的前面的部分空间去填充数据,这个就可以大大的提高这个空间的利用率,而且出队的数据越多,这个前面的空间就越大,这个空间的利用率就会越高;
2.循环队列的实现
(1)指针指向位置的说明

front指向的是这个队列的第一个数据前面的位置,而不是指向队列里面的第一个数据,rear指向的就是这个队列的最后一个数据;
(2)循环队列的实现,就是让这个最后一个下标加上1之后和这个队列里面的元素的个数取模,等于0,这个时候就相当于这个最后一个下标之后就是第一个下标,以此来实现这个循环队列;

(3)队列是空的临界条件:
我们假设这个时候的队列里面只有一个数据,指针的指向情况如图所示,front指向的就是这个队列里面的第一个数据的前一个位置,rear指向的就是这个队列的最后一个数据;
我们把这个数据出队之后,这个数据相当于就是被删除了,这个时候队列就是空的,删除数据之后我们的front指针需要向前移动一个位置,这个时候两个指针指向相同位置;

(4)队列数据是满的临界条件:
我们假设这个时候的队列里面只有一个位置是空余的,我们这个时候的指针的指向如图所示,rear指向这个队列数据的最后一个(这个时候已经是循环队列了,所以这个时候a6才是这个队列的最后一个数据),front指向这个队列的前面的一个位置;

我们把这个数据在入队一个之后,这个队列就是满的,但是添加数据之后,rear指针需要向后移动,这个时候两个指针再次指向了相同位置,只不过上一次是这个front向前移动,追上了rear指针,这一次是这个rear指针的移动和front指针指向了相同位置,因为这个数据的入队,我们需要移动这个rear指针,数据出队,我们需要移动这个front指针,两个最后的效果是一样的,但是中间经历的过程不是一样的;
(5)

(6)循环队列实现入队和出队
我们之前的这个思路完全不变,只不过这个循环之后,原来这个入队就是把这个rear直接向后移动一位即可,但是这个时候因为是循环队列,所以我们需要多考量一下,就是让这个rear+1能够被队列元素个数整除即可,这个时候就满足循环队列的要求;
同理这个队列里面数据的出队,原来就是这个front=front+1现在就是在这个front+1后面出以这个队列元素的个数进行取模即可;

(7)得到队列的第一个数据
我们让这个front+1位置元素赋值给这个数据,这个时候我们就可以得到我们想要的数据;

3.银行排队算法
(1)基本介绍

(2)需要的结构
第一个就是这个事件链表,表示这个银行业务的时间发生情况,交给这个计算机进行处理,还有一个就是需要这个队列数组,表示每一个窗口的这个排队的情况;

(3)具体举例说明

这个事件链表和这个队列数组之间有什么关系?我们通过两个例子说明一下:
首先看一下这个事件链表里面的16 2这个节点,这个2表示的就是右边的2号窗口,这个时候我们就去右边找到2号窗口,发现这个里面5 11两个数据,表示就是时间为5的时候,窗口2来了一个客户,经过11分钟的服务,这个客户完成离开,离开时间就是16,因此左边的这个链表里面节点写的数据是16;
再看一下这个左边链表的37 1,表示这个显示的是1号窗口的事件情况,这个时候我们发现这个时间为8时候,客户办理业务,经过29分钟之后,这个客户离开,因此这个离开时间就是8+29=37符合左边的链表节点显示的数据;
由此可见,链表和队列数组有着密切的联系,两者之间的数据是相互辅助的;
由于这个算法的综合性比较强,因此学有余力的同学可以自行学习,刚开始学习栈和队列的同学不建议上手,因为这个里面涉及到链表,和这个队列数组,综合性较强,需要把这些铺垫知识学好再去学习;
懒猫老师-数据结构-(12)队列应用:银行排队模拟(离散事件模拟)_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1nE411u7n4/?spm_id_from=333.788&vd_source=a432cb5e896a2b96961d1f73a6ebe0ca
相关文章:
栈和队列---循环队列
1.循环队列的出现 (1)上面的这个就是一个普通的数据的入队和出队的过程我们正常情况下去实现这个入队和出队的过程,就是这个数据从这个队尾进入,从队头离开,但是这个加入的时候肯定是没有其他的问题的,直接…...
打卡第4天----链表
通过学习基础,发现我的基本功还得需要再练练,思路得再更加清晰明了,这样子做算法题才能驾轻就熟。每天记录自己的进步。 一、两两交换 题目编号:24 题目描述: 给你一个链表,两两交换其中相邻的节点&#x…...
07-7.1.1 查找的基本概念
👋 Hi, I’m Beast Cheng 👀 I’m interested in photography, hiking, landscape… 🌱 I’m currently learning python, javascript, kotlin… 📫 How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…...
【数据结构与算法】快速排序双指针法
💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法》 期待您的关注 ...
GESP C++一级真题
PDF图片1-7 点赞❤️关注😍收藏⭐️ 互粉必回🙏🙏🙏...
短信验证码实现
一、设置AccessKey 创建用户并配置使用权限,使我们拥有调用 aliyunAPI 的权限,之后会生成 AccessKeyID 和 AccessKey密码,后面我们会使用到。需要注意的是 AccessKeyID 和 AccessKey密码生成后我们需要将他保存起来,否则后期无法查…...
pnpm的坑
请问pnpm的两个坑怎么解决: 第一个坑:没有节省磁盘空间 我已经配置了依赖的存储位置, 但我在项目里pnpm install以后,发现依赖包还是很大, 然后发现里面的链接并不是指向先前配置的依赖存储位置,而是指…...
如何监控和分析 PostgreSQL 中的查询执行计划?
文章目录 一、为什么监控和分析查询执行计划很重要二、PostgreSQL 中用于获取查询执行计划的方法三、理解查询执行计划的关键元素四、通过示例分析查询执行计划五、优化查询执行计划的常见策略六、使用工具辅助分析七、结合实际案例的详细分析八、总结 在 PostgreSQL 数据库中&…...
ruoyi-cloud登录接口实现滑块验证码
一、前言 ruoyi项目默认的验证码是这样的 今天来尝试增加滑块验证码,我们用到的是tianai-captcha。 文档地址:http://doc.captcha.tianai.cloud/ 源码地址:https://gitee.com/tianai/tianai-captcha 下面来看具体的步骤。 二、后端 在g…...
三坐标测量机:柔性生产制造中的高精度测量解决方案
柔性生产制造是制造业的核心竞争力之一。它强调生产线的灵活性和适应性,以满足市场对产品多样化和个性化的需求。在当今快速变化的工业环境中,随着消费者对产品个性化和定制化需求的增加,柔性生产制造和三坐标测量机的结合,为智能…...
puppeteer 爬虫初探
1. puppeteer 和 puppeteer-core 安装 puppeteer 会默认下载一个最新版本的 chrome 浏览器; 安装 puppeteer-core ,不会安装 chrome, 若要程序打开浏览器运行时,需手动指定电脑系统安装的 chrome 浏览器路径; 2. puppeteer-core …...
Pandas 入门 15 题
Pandas 入门 15 题 1. 相关知识点1.1 修改DataFrame列名1.2 获取行列数1.3 显示前n行1.4 条件数据选取值1.5 创建新列1.6 删去重复的行1.7 删除空值的数据1.9 修改列名1.10 修改数据类型1.11 填充缺失值1.12 数据上下合并1.13 pivot_table透视表的使用1.14 melt透视表的使用1.1…...
使用微信开发者工具连接gitee
编写代码 打开微信开发者工具 编写小程序代码 提交代码 在微信开发者工具提交代码到gitee仓库的步骤: 1.在gitee创建仓库,得到仓库url 2.微信开发者工具设置远程仓库 点击版本管理-->点击设置-->网络和认证-->认证方式选择 使用用户名和…...
论文复现-基于决策树算法构建银行贷款审批预测模型(金融风控场景)
作者Toby,来源公众号:Python风控模型,基于决策树算法构建银行贷款审批预测模型 目录 1.金融风控论文复现 2.项目背景介绍 3.决策树介绍 4.数据集介绍 5.合规风险提醒 6.技术工具 7.实验过程 7.1导入数据 7.2数据预处理 7.3数据可…...
力扣225题解析:使用队列实现栈的三种解法(Java实现)
引言 在算法和数据结构中,如何用队列实现栈是一个常见的面试题和实际应用问题。本文将探讨力扣上的第225题,通过不同的方法来实现这一功能,并分析各种方法的优劣和适用场景。 问题介绍 力扣225题目要求我们使用队列实现栈的下列操作&#…...
网络协议与标准
协议: 语法 ;计算机的算法,二进制 语义 ;不要有出现歧义的 同步 ; 同步还原信息,收发同步 标准: ISO(国际标准化组织) IEEE(电气和电子工程师学会) 局域网技术 一.协议…...
154. 寻找旋转排序数组中的最小值 II(困难)
154. 寻找旋转排序数组中的最小值 II 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转:154. 寻找旋转排序数组中的最小值 II 2.详细题解 该题是153. 寻找旋转排序数组中的最小值的进阶题,在153. 寻找旋转排序数组中的最小值…...
5、MP4解复用---AAC+H264
MP4 MP4同样是一种容器格式,是由一个一个Box组成,每个Box又分为Header与Data,Data又包含很多子Box,具体的MP4文件结构也看过,内部Box结构比较复杂,一般不写MP4解释器的话,Box结构不用了解太细&a…...
计算样本之间的相似度
文章目录 前言一、距离度量1.1 欧几里得距离(Euclidean Distance)1.2 曼哈顿距离(Manhattan Distance)1.3 切比雪夫距离(Chebyshev Distance)1.4 闵可夫斯基距离(Minkowski Distance)…...
2-5 softmax 回归的简洁实现
我们发现通过深度学习框架的高级API能够使实现线性回归变得更加容易。 同样,通过深度学习框架的高级API也能更方便地实现softmax回归模型。 本节如在上节中一样, 继续使用Fashion-MNIST数据集,并保持批量大小为256。 import torch from torc…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
