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

在C++中实现一个队列,可以通过数组或链表来模拟队列的先进先出(FIFO)特性。下面以数组方式实现一个简单的循环队列,包含基本操作:入队、出队、判断空/满、获取队首元素等。
1. 队列的基本结构设计
定义一个固定大小的数组用于存储元素,同时维护两个指针:front 表示队头位置,rear 表示队尾的下一个插入位置。使用循环结构可以更高效地利用空间。
代码实现如下:
立即学习“C++免费学习笔记(深入)”;
#includeusing namespace std; class Queue { private: int* arr; // 存储数据的数组 int front; // 队头索引 int rear; // 队尾索引(指向下一个插入位置) int capacity; // 队列容量 int count; // 当前元素个数
public: // 构造函数 Queue(int size) { capacity = size; arr = new int[capacity]; front = 0; rear = 0; count = 0; }
// 析构函数 ~Queue() { delete[] arr; } // 判断队列是否为空 bool isEmpty() { return count == 0; } // 判断队列是否满 bool isFull() { return count == capacity; } // 入队(从队尾插入) void enqueue(int value) { if (isFull()) { cout zuojiankuohaophpcnzuojiankuohaophpcn "队列已满,无法入队!" zuojiankuohaophpcnzuojiankuohaophpcn endl; return; } arr[rear] = value; rear = (rear + 1) % capacity; // 循环更新rear count++; } // 出队(从队头删除) int dequeue() { if (isEmpty()) { cout zuojiankuohaophpcnzuojiankuohaophpcn "队列为空,无法出队!" zuojiankuohaophpcnzuojiankuohaophpcn endl; return -1; // 返回-1表示错误 } int value = arr[front]; front = (front + 1) % capacity; count--; return value; } // 获取队首元素 int getFront() { if (isEmpty()) { cout zuojiankuohaophpcnzuojiankuohaophpcn "队列为空!" zuojiankuohaophpcnzuojiankuohaophpcn endl; return -1; } return arr[front]; } // 获取当前队列元素个数 int size() { return count; }};
2. 使用示例
下面是一个简单的测试代码,演示如何使用上面实现的队列:
bee餐饮点餐外卖小程序下载bee餐饮点餐外卖小程序是针对餐饮行业推出的一套完整的餐饮解决方案,实现了用户在线点餐下单、外卖、叫号排队、支付、配送等功能,完美的使餐饮行业更高效便捷!功能演示:1、桌号管理登录后台,左侧菜单 “桌号管理”,添加并管理你的桌号信息,添加以后在列表你将可以看到 ID 和 密钥,这两个数据用来生成桌子的二维码2、生成桌子二维码例如上面的ID为 308,密钥为 d3PiIY,那么现在去左侧菜单微信设置
int main() { Queue q(5); // 创建容量为5的队列q.enqueue(10); q.enqueue(20); q.enqueue(30); cout zuojiankuohaophpcnzuojiankuohaophpcn "队首元素: " zuojiankuohaophpcnzuojiankuohaophpcn q.getFront() zuojiankuohaophpcnzuojiankuohaophpcn endl; cout zuojiankuohaophpcnzuojiankuohaophpcn "队列大小: " zuojiankuohaophpcnzuojiankuohaophpcn q.size() zuojiankuohaophpcnzuojiankuohaophpcn endl; cout zuojiankuohaophpcnzuojiankuohaophpcn "出队元素: " zuojiankuohaophpcnzuojiankuohaophpcn q.dequeue() zuojiankuohaophpcnzuojiankuohaophpcn endl; cout zuojiankuohaophpcnzuojiankuohaophpcn "出队元素: " zuojiankuohaophpcnzuojiankuohaophpcn q.dequeue() zuojiankuohaophpcnzuojiankuohaophpcn endl; cout zuojiankuohaophpcnzuojiankuohaophpcn "队首元素: " zuojiankuohaophpcnzuojiankuohaophpcn q.getFront() zuojiankuohaophpcnzuojiankuohaophpcn endl; cout zuojiankuohaophpcnzuojiankuohaophpcn "队列大小: " zuojiankuohaophpcnzuojiankuohaophpcn q.size() zuojiankuohaophpcnzuojiankuohaophpcn endl; return 0;}
3. 关键点说明
循环队列的优势:避免频繁移动元素,提高效率。通过取模运算实现索引的循环使用。
count变量的作用:单独记录元素个数,使得判空和判满逻辑清晰,尤其适用于front == rear时的边界情况。
内存管理:使用动态数组,并在析构函数中释放内存,防止泄漏。
4. 扩展建议
- 可以模板化实现,支持不同类型的数据(如 template
) - 使用std::vector替代原生数组,自动管理容量
- 实现双端队列(deque)支持前后插入和删除
基本上就这些。这个实现适合学习数据结构的基础原理,实际开发中也可以直接使用 std::queue,它是STL提供的容器适配器,底层可基于 deque 或 list 实现。











