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

循环队列的两种实现

本文,笔者将用一种方式实现一种特殊的队列——循环队列,这个循环队列基于leetcode上的一道算法题:622. 设计循环队列 - 力扣(LeetCode)

数组实现循环链表

这种方法中,我们首先了解循环队列的逻辑:循环队列就是基于FIFO的原则,队尾和队首形成一个循环,可以利用一块同样的空间,类比一下图书馆排队占座位即可。

下面考虑一下循环队列的实现,首先,循环队列满足先进先出的原则,而且是一块有限空间,所以这时候就可以看出雏形了,定义两个指针,一个是head头指针,另外一个是tail指针,但是这个指针不太一样,因为tail这个指针指向的是最后一个位置的下一个位置,而不是最后一个位置,但是如果这样就会有个问题:

如上图所示,流程是首先Push入队,放到tail所在位置,然后tail就往后走,但是head不变,Pop的时候head向右移动一格,tail不变,但是如果head==tail,那么要么空队列,要么满队列,所以这样是错误的,所以要想办法改变这个错误,一般来说有两种方式,笔者在这里展示大多数人使用的方式:额外多开一个空间,进而解决空和满冲突的问题,直接在VS2022中展示:

首先先声明一下接口:

上图就是需要的接口了,下面就来一个一个实现这些接口了。

如上图,这是第一个接口,因为需要多用一个位置,所以就需要令K为k+1,*a就是数组的指针。

这是第二个接口,旨在实现入队的操作,首先得判断一下队列不能满,然后就是把tail视作指针,把新值放在tail所指的位置,在让tail++,最后,如果tail已经到末尾了,那就需要回到0,也就是取模的操作,归根结底就是为了保证越界后绕回起点。

http://www.dtcms.com/a/295955.html

相关文章:

  • Spring AI 系列之二十四 - ModerationModel
  • 每日算法刷题Day52:7.24:leetcode 栈5道题,用时1h35min
  • 前端性能新纪元:Rust + WebAssembly 如何在浏览器中实现10倍性能提升(以视频处理为例)
  • uniapp nvue开发App 横竖屏切换丢失上下文导致 setTimeout和clearTimeout报错
  • [网安工具] 自动化威胁检测工具 —— D 盾 · 使用手册
  • SAP-MM-采购订单批量创建 excel 版
  • 保留5位小数封装一个自定义指令
  • Linux 内核基础统简全解:Kbuild、内存分配和地址映射
  • 10分钟搭建脚手架:Spring Boot 3.2 + Vue3 前后端分离模板
  • Springboot儿童医院问诊导诊系统aqy75(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 使用钉钉开源api发送钉钉工作消息
  • C语言 一文详解常用的字符串操作函数及模拟实现
  • 医疗系统国产化实录:SQL Server国产替代,乙方保命指南
  • DigitalOcean 一键模型部署,新增支持百度开源大模型ERNIE 4.5 21B
  • 集合中Comparable接口和Equals方法的冲突
  • 【Mermaid 离线工具】Mermaid 流程图生成器 - 高清PNG输出,一键生成专业级流程图!
  • 共创养生新时代——2025酵素益生产品展暨中秋滋补选品节即将开启
  • QT6 源(165)模型视图架构里的所有的信号函数概览
  • UNETR++: Delving Into Efficient and Accurate 3D Medical Image Segmentation
  • 深度分析Java内存模型
  • 【全新上线】境内 Docker 镜像状态监控
  • 算法第三十八天:动态规划part06(第九章)
  • 【shell脚本编程】day1 备份指定文件类型
  • Unreal5从入门到精通之 动画蓝图 快速入门
  • ML1-ETO 阳性白血病的复发与 LSC 的持续存在密切相关
  • 2025智能BI⼯具竞品深度解析:DataFocus如何挑Tableau与PowerBI的霸主地位?
  • OpenCV图像插值、边缘填充、图像掩膜、噪声消除实战指南
  • 华为仓颉编程语言的表达式的特点
  • 网安学习NO.18
  • 深入掌握CSS Grid布局:每个属性详解与实战示例