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

C++循环队列 经典示例

循环队列(Circular Queue),又称环形缓冲区,是一种常用的数据结构,特别适用于资源有限的场合,比如操作系统中的任务调度、网络数据缓冲等。循环队列在数组的基础上实现,逻辑上首尾相连,能够充分利用数组空间。

下面是一个用C++实现的循环队列示例:

#include <iostream>
using namespace std;class CircularQueue {
private:int *queue;int front;int rear;int size;int capacity;public:CircularQueue(int k) {capacity = k + 1;  // 多一个空间用于区分队列满和空queue = new int[capacity];front = 0;rear = 0;size = 0;}~CircularQueue() {delete[] queue;}bool enqueue(int value) {if (isFull()) {cout << "Queue is full" << endl;return false;}queue[rear] = value;rear = (rear + 1) % capacity;size++;return true;}bool dequeue() {if (isEmpty()) {cout << "Queue is empty" << endl;return false;}front = (front + 1) % capacity;size--;return true;}int Front() {if (isEmpty()) {cout << "Queue is empty" << endl;return -1;}return queue[front];}int Rear() {if (isEmpty()) {cout << "Queue is empty" << endl;return -1;}return queue[(rear - 1 + capacity) % capacity];}bool isEmpty() {return size == 0;}bool isFull() {return size == capacity - 1;}int getSize() {return size;}
};int main() {CircularQueue cq(5);  // 创建容量为5的循环队列cq.enqueue(10);cq.enqueue(20);cq.enqueue(30);cq.enqueue(40);cq.enqueue(50);cout << "Front element: " << cq.Front() << endl;  // 输出队首元素cout << "Rear element: " << cq.Rear() << endl;    // 输出队尾元素cq.dequeue();cq.dequeue();cout << "After dequeuing two elements:" << endl;cout << "Front element: " << cq.Front() << endl;  // 输出队首元素cout << "Rear element: " << cq.Rear() << endl;    // 输出队尾元素return 0;
}

这个示例中,CircularQueue 类实现了一个循环队列,支持以下操作:

  • enqueue(int value):向队列尾部添加一个元素。
  • dequeue():从队列头部移除一个元素。
  • Front():获取队首元素。
  • Rear():获取队尾元素。
  • isEmpty():检查队列是否为空。
  • isFull():检查队列是否已满。
  • getSize():获取当前队列中的元素个数。

循环队列的实现利用数组和两个指针(frontrear)来追踪队首和队尾的位置,通过取模操作来实现首尾相连的效果。

http://www.lryc.cn/news/393927.html

相关文章:

  • 【程序大侠传】大表分库分表切换数据库类型导致pagehelper生成sql语法报错
  • 7、Redis 队列与 Stream
  • FFT剖析
  • git clone报错RPC failed; curl 92 HTTP/2 stream 7 was not closed cleanly
  • Apispec,一个用于生成 OpenAPI(Swagger)规范的 Python 库
  • SpringBoot 自定义异常返回数据格式
  • 【xinference】(15):在compshare上,使用docker-compose运行xinference和chatgpt-web项目,配置成功!!!
  • 【Unity 3D角色移动】
  • 个人视角,社会影响力:自媒体的魅力所在
  • 算法训练营day70
  • EtherCAT转Profinet网关配置说明第二讲:上位机软件配置
  • 日志自动分析-Web---360星图GoaccessALBAnolog
  • 【面试八股文】java基础知识
  • ssrf结合redis未授权getshell
  • 魔法自如:精通 IPython %automagic 命令的切换艺术
  • 基于CentOS Stream 9平台搭建MinIO以及开机自启
  • shell-awk语法整理
  • 关于忠诚:忠于自己的良知、理想、信念
  • 探索Linux:开源世界的无限可能
  • 深度学习之半监督学习:一文梳理目标检测中的半监督学习策略
  • Hive 高可用分布式部署详细步骤
  • ubuntu下运行程序时提示缺库问题的有效解决方法
  • GNU/Linux - wic文件的使用
  • 前端JS 插件实现下载【js-tool-big-box,下载大文件(fetch请求 + 下载功能版)
  • JVM专题之垃圾收集器
  • SSM养老院管理系统-计算机毕业设计源码02221
  • 使用Keil将STM32部分程序放在RAM中运行
  • 【MySQL8.0】 CentOS8.0下安装mysql报错权限问题的记录
  • 在内网互通的服务器中自由跳转与数据管理
  • Arcgis Api 三维聚合支持最新版API