c++怎么实现一个环形队列_c++循环队列数据结构实现

环形队列利用固定数组和取模操作实现FIFO,通过front和rear指针循环移动,采用浪费一个空间的方法区分空满状态,代码简洁高效。

c++怎么实现一个环形队列_c++循环队列数据结构实现

环形队列(也叫循环队列)是一种线性数据结构,它通过固定大小的数组实现队列的先进先出(FIFO)特性,并利用“取模”操作让队尾和队头在数组中循环移动,避免普通队列中因频繁出队导致的空间浪费。

环形队列的基本原理

使用一个固定大小的数组存储元素,配合两个指针(实际是整型索引):

front:指向队列第一个元素的位置rear:指向下一个插入位置的索引(即队尾的后一位)

通过 (index + 1) % capacity 实现索引的循环跳转。当 rear == front 时,队列可能为空或为满,因此需要额外处理以区分这两种状态。

如何区分空与满

常见方法有三种:

立即学习“C++免费学习笔记(深入)”;

使用一个额外的变量记录当前元素个数浪费一个数组空间(最常用)添加一个标志位标记最后一次操作是入队还是出队

下面采用“浪费一个空间”的方式实现,即队列满的条件是 (rear + 1) % capacity == front。

C++ 实现代码

#include using namespace std;

class CircularQueue {private:int* arr; // 存储数据的数组int front; // 队头索引int rear; // 队尾后一个位置int capacity; // 容量

public:// 构造函数CircularQueue(int size) {capacity = size + 1; // 多分配一个空间用于判断满arr = new int[capacity];front = 0;rear = 0;}

// 析构函数~CircularQueue() {    delete[] arr;}// 判断是否为空bool isEmpty() {    return front == rear;}// 判断是否为满bool isFull() {    return (rear + 1) % capacity == front;}// 入队bool enqueue(int value) {    if (isFull()) {        cout << "队列已满,无法入队n";        return false;    }    arr[rear] = value;    rear = (rear + 1) % capacity;    return true;}// 出队bool dequeue(int& value) {    if (isEmpty()) {        cout << "队列为空,无法出队n";        return false;    }    value = arr[front];    front = (front + 1) % capacity;    return true;}// 获取队头元素bool getFront(int& value) {    if (isEmpty()) {        cout << "队列为空n";        return false;    }    value = arr[front];    return true;}// 获取当前元素个数int size() {    return (rear - front + capacity) % capacity;}

};

// 使用示例int main() {CircularQueue q(5); // 创建容量为5的队列(实际数组大小6)

q.enqueue(10);q.enqueue(20);q.enqueue(30);int val;q.getFront(val);cout << "队头元素: " << val << endl;q.dequeue(val);cout << "出队元素: " << val << endl;cout << "当前大小: " << q.size() << endl;return 0;

}

这个实现简洁高效,适合嵌入式、实时系统等对性能要求较高的场景。front 和 rear 的更新都通过取模完成循环,逻辑清晰。基本上就这些,不复杂但容易忽略边界判断。

以上就是c++++怎么实现一个环形队列_c++循环队列数据结构实现的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1480586.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
c++怎么用OpenMP进行并行计算_c++使用OpenMP实现多线程加速方法
上一篇 2025年12月19日 04:45:49
C++中vector和list的性能和适用场景_C++常用序列容器性能对比与选择指南
下一篇 2025年12月19日 04:46:00

相关推荐

发表回复

登录后才能评论
关注微信