使用循环数组实现C++队列,定义包含front、rear、capacity和count的Queue类,通过enqueue和dequeue实现入队出队操作,利用取模运算实现循环特性,count区分空满状态,确保FIFO顺序,并在析构函数中释放动态数组内存。

在C++中手动实现一个队列,可以通过数组或链表来完成。下面以循环数组方式实现一个基础但完整的队列结构,支持常见操作:入队(enqueue)、出队(dequeue)、判空、判满、获取队头元素等。
队列是一种“先进先出”(FIFO)的数据结构。有两个指针:
使用循环数组可以更高效地利用空间,避免频繁移动数据。
#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 = 10) {
arr = new int[size];
capacity = size;
front = 0;
rear = 0;
count = 0;
}</p><pre class='brush:php;toolbar:false;'>// 析构函数
~Queue() {
delete[] arr;
}
// 入队
void enqueue(int value) {
if (isFull()) {
cout << "队列已满,无法入队!\n";
return;
}
arr[rear] = value;
rear = (rear + 1) % capacity;
count++;
}
// 出队
void dequeue() {
if (isEmpty()) {
cout << "队列为空,无法出队!\n";
return;
}
front = (front + 1) % capacity;
count--;
}
// 获取队头元素
int getFront() {
if (isEmpty()) {
throw runtime_error("队列为空!");
}
return arr[front];
}
// 判断是否为空
bool isEmpty() {
return count == 0;
}
// 判断是否已满
bool isFull() {
return count == capacity;
}
// 获取当前元素个数
int size() {
return count;
}};
立即学习“C++免费学习笔记(深入)”;
下面是一个简单的测试代码,演示如何使用这个队列:
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; // 输出 10
cout << "当前大小:" << q.size() << endl; // 输出 3
q.dequeue();
cout << "出队后队头:" << q.getFront() << endl; // 输出 20
q.enqueue(40);
q.enqueue(50);
q.enqueue(60); // 触发队满提示
while (!q.isEmpty()) {
cout << "出队:" << q.getFront() << endl;
q.dequeue();
}
return 0;}
(rear + 1) % capacity实现索引循环,节省空间基本上就这些。这个实现适合学习理解队列原理。实际开发中也可以使用 STL 的 std::queue,但手写有助于掌握底层机制。
以上就是c++++怎么实现一个队列(queue)_c++手动实现队列结构教程的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号