数据结构 / 队列 / 循环队列 / 概念

1. 定义

为充分利用向量空间,克服假溢出现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。循环队列是把顺序队列首尾相连,把存储队列元素的表从逻辑上看成一个环,成为循环队列。

2.简介

循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。在循环队列结构中,当存储空间的最后一个位置已被使用而再要进入队运算时,只需要存储空间的第一个位置空闲,便可将元素加入到第一个位置,即将存储空间的第一个位置作为队尾。 循环队列可以更简单防止伪溢出的发生,但队列大小是固定的。

在循环队列中,当队列为空时,有front=rear,而当所有队列空间全占满时,也有front=rear。为了区别这两种情况,规定循环队列最多只能有MaxSize-1个队列元素,当循环队列中只剩下一个空存储单元时,队列就已经满了。因此,队列判空的条件是front=rear,而队列判满的条件是front=(rear+1)%MaxSize。
图1

注意:

  • 队列下标从0开始
  • rear指向的是最后一个空位置

3.队列中元素的个数计算

  • 队列中元素的个数:len = ( rear - front + MaxSize ) % MaxSize
  • 解析:
    • 不考虑循环,队列的个数为rear-front + 1 - 1, +1是队列下标从0开始的,-1是rear指向最后空位置
    • 因为有循环,会有跨界的可能,先加上一个MaxSize, 相当于放在一个2xMaxSize中,避免了跨界,计算出长度后,多余部分用%MaxSize来纠正 (MaxSize % MaxSize 为0,2xMaxSize / MaxSize 也为0,不会对最后结果有影响)
      • 例1:
        • 如下图3,MaxSize=8,front=2, rear=0, rear正好跨过一轮
        • rear-front=-2, 这时加上MaxSize再%MaxSize,(0-2+8)%8=6
      • 例2:
        • 如下图4,MaxSize=8,front=0, rear=6
        • rear-front=6, (6-0+8)%8=6

图4 图3

参考: 循环队列_百度百科


目录:学习笔记快速链接

下一篇:循环队列 / 结构体定义和创建

相关推荐
花落已飘3 分钟前
多线程 vs 异步
linux·网络·系统架构
算法_小学生28 分钟前
LeetCode 287. 寻找重复数(不修改数组 + O(1) 空间)
数据结构·算法·leetcode
PanZonghui29 分钟前
Centos项目部署之Nginx部署项目
linux·nginx
码出钞能力1 小时前
linux内核模块的查看
linux·运维·服务器
星辰云-2 小时前
# Linux Centos系统硬盘分区扩容
linux·运维·centos·磁盘扩容
聽雨2372 小时前
02每日简报20250704
linux·科技·金融·生活·社交电子·娱乐·媒体
Maki Winster3 小时前
Peek-Ubuntu上Gif录制工具-24.04LTS可装
linux·ubuntu·peek
liulilittle3 小时前
C++ i386/AMD64平台汇编指令对齐长度获取实现
c语言·开发语言·汇编·c++
Wo3Shi4七3 小时前
哈希冲突
数据结构·算法·go
Maki Winster4 小时前
在 Ubuntu 下配置 oh-my-posh —— 普通用户 + root 各自使用独立主题(共享可执行)
linux·运维·ubuntu