使用数组实现循环队列,通过front和rear指针及count变量管理元素,支持入队、出队、判空/满等操作,利用取模实现循环,避免内存浪费。

在C++中实现一个队列,可以通过数组或链表来模拟队列的先进先出(FIFO)特性。下面以数组方式实现一个简单的循环队列,包含基本操作:入队、出队、判断空/满、获取队首元素等。
定义一个固定大小的数组用于存储元素,同时维护两个指针:front 表示队头位置,rear 表示队尾的下一个插入位置。使用循环结构可以更高效地利用空间。
代码实现如下:
立即学习“C++免费学习笔记(深入)”;
#include <iostream>
using namespace std;
<p>class Queue {
private:
int* arr; // 存储数据的数组
int front; // 队头索引
int rear; // 队尾索引(指向下一个插入位置)
int capacity; // 队列容量
int count; // 当前元素个数</p><p>public:
// 构造函数
Queue(int size) {
capacity = size;
arr = new int[capacity];
front = 0;
rear = 0;
count = 0;
}</p><pre class='brush:php;toolbar:false;'>// 析构函数
~Queue() {
delete[] arr;
}
// 判断队列是否为空
bool isEmpty() {
return count == 0;
}
// 判断队列是否满
bool isFull() {
return count == capacity;
}
// 入队(从队尾插入)
void enqueue(int value) {
if (isFull()) {
cout << "队列已满,无法入队!" << endl;
return;
}
arr[rear] = value;
rear = (rear + 1) % capacity; // 循环更新rear
count++;
}
// 出队(从队头删除)
int dequeue() {
if (isEmpty()) {
cout << "队列为空,无法出队!" << endl;
return -1; // 返回-1表示错误
}
int value = arr[front];
front = (front + 1) % capacity;
count--;
return value;
}
// 获取队首元素
int getFront() {
if (isEmpty()) {
cout << "队列为空!" << endl;
return -1;
}
return arr[front];
}
// 获取当前队列元素个数
int size() {
return count;
}};
下面是一个简单的测试代码,演示如何使用上面实现的队列:
int main() {
Queue q(5); // 创建容量为5的队列
<pre class='brush:php;toolbar:false;'>q.enqueue(10);
q.enqueue(20);
q.enqueue(30);
cout << "队首元素: " << q.getFront() << endl;
cout << "队列大小: " << q.size() << endl;
cout << "出队元素: " << q.dequeue() << endl;
cout << "出队元素: " << q.dequeue() << endl;
cout << "队首元素: " << q.getFront() << endl;
cout << "队列大小: " << q.size() << endl;
return 0;}
循环队列的优势:避免频繁移动元素,提高效率。通过取模运算实现索引的循环使用。
count变量的作用:单独记录元素个数,使得判空和判满逻辑清晰,尤其适用于front == rear时的边界情况。
内存管理:使用动态数组,并在析构函数中释放内存,防止泄漏。
基本上就这些。这个实现适合学习数据结构的基础原理,实际开发中也可以直接使用 std::queue,它是STL提供的容器适配器,底层可基于 deque 或 list 实现。
以上就是c++++怎么实现一个队列_队列数据结构实现的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号