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

【数据结构与算法】循环队列

循环队列

  • 一.循环队列的引入
  • 二.循环队列的原理
  • 三.循环队列判断是否为满或空
    • 1.是否为空
    • 2.是否为满
  • 四.循环队列入队
  • 五.循环队列出队
  • 六.循环队列的遍历
  • 七.循环队列获取长度
  • 八.总结

一.循环队列的引入

还记得我们顺序队列的删除元素嘛,我们有两种方式,一种是将数组要删除元素后面的元素往前面移动.
还有一种是直接将front向后面指,达到删除的效果.
这两种方式有有其弊端,第一种如果数据巨大,需要频繁的移动.
第二种则是对数组空间的浪费,删除越多,越来越多的空间浪费.
那么我们采用循环队列就可以解决这些问题.
在这里插入图片描述

二.循环队列的原理

正常我们的尾巴指向末尾,现在我们想办法,将rear指向头位置.
在这里插入图片描述
当然数组不是链表,只需要我们就指向一下进行了,我们需要能够循环的指向,当不停的插入的时候,我们不断的循环指向.

三.循环队列判断是否为满或空

1.是否为空

还是跟原来一样,如果front=rear就为空.
在这里插入图片描述

2.是否为满

在这里插入图片描述
这个就是循环链表的特殊之处了,为了能够循环指向,我们用到了取模运算,我这里MAXSIZE这个宏是5,那么我的rear可以指向0~4一直循环往返.
为什么要用rear加1,这个问题也很关键,为了更能很好的判断是否为满,我们空了一个数组元素,为什么呢?
首先,rear是指向最后一个元素的下一个元素,如果我们插满的话,因为是循环的,那么rear就会等于front,这个与我们判断是否为空就会冲突,所以我们用空数组指向的rear的下一个来判断是否与front相等来判断.

四.循环队列入队

在这里插入图片描述

五.循环队列出队

在这里插入图片描述

六.循环队列的遍历

在这里插入图片描述

七.循环队列获取长度

在这里插入图片描述

八.总结

循环队列是一种基于数组实现的队列数据结构,它的特点是可以通过循环利用数组的空间来实现高效的出队和入队操作。循环队列中通常会用到两个指针,分别指向队首和队尾。当队满时,队尾指针会绕回到数组的开头;当队空时,队首和队尾指针相等。循环队列在实际应用中常用于实现缓冲区等场景,可以提高空间利用率和操作效率。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 项目实战_表白墙(升级版)
  • IT服务运营管理中的关键考核指标
  • AI机器人:一键实现手机自动化操作
  • C++ STL adjacent_difference 用法
  • JavaScript递归菜单栏
  • GPT对话代码库——结构体与全局变量的比较,使用结构体的好处
  • 【C++高阶】哈希:全面剖析与深度学习
  • 基于N32L406的EasyLogger日志库移植教程
  • vue如何在axios.js中跳转页面(解决办法)
  • LeetCode541 反转字符串 II
  • Java----反射
  • 英伟达推出新中国特供版芯片B20:挑战与机遇并存
  • OD C卷 - 王者荣耀游戏分组
  • 顺序表,链表,顺序栈,顺序循环队列,链式队列的基本操作
  • 为什么说脱离决策的数据分析都是无用功
  • 「面试题」如何实现一个圣杯布局?
  • 【剑指offer】让抽象问题具体化
  • Android Studio:GIT提交项目到远程仓库
  • Bootstrap JS插件Alert源码分析
  • classpath对获取配置文件的影响
  • CSS居中完全指南——构建CSS居中决策树
  • ES学习笔记(12)--Symbol
  • Spring Cloud Feign的两种使用姿势
  • vue:响应原理
  • 聚簇索引和非聚簇索引
  • 普通函数和构造函数的区别
  • 前端之Sass/Scss实战笔记
  • 手写双向链表LinkedList的几个常用功能
  • 我的业余项目总结
  • 我这样减少了26.5M Java内存!
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • (11)MATLAB PCA+SVM 人脸识别
  • (Forward) Music Player: From UI Proposal to Code
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (pytorch进阶之路)扩散概率模型
  • (ZT)薛涌:谈贫说富
  • (超详细)语音信号处理之特征提取
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (转)关于多人操作数据的处理策略
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • ./configure、make、make install 命令
  • .NET 8 跨平台高性能边缘采集网关
  • .net Application的目录
  • .net core 6 redis操作类
  • .net 按比例显示图片的缩略图
  • .NET 中的轻量级线程安全
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • .net经典笔试题
  • .NET未来路在何方?
  • .Net下的签名与混淆
  • .NET中使用Protobuffer 实现序列化和反序列化