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

在C++中手动实现一个队列,可以通过数组或链表来完成。下面以循环数组方式实现一个基础但完整的队列结构,支持常见操作:入队(enqueue)、出队(dequeue)、判空、判满、获取队头元素等。
1. 队列的基本原理
队列是一种“先进先出”(FIFO)的数据结构。有两个指针:
- front:指向队列第一个元素的位置
- rear:指向下一个插入位置的索引
使用循环数组可以更高效地利用空间,避免频繁移动数据。
2. 定义队列类
#includeusing namespace std; class Queue { private: int* arr; // 存储数据的数组 int front; // 队头索引 int rear; // 队尾索引 int capacity; // 队列最大容量 int count; // 当前元素个数
public: // 构造函数 Queue(int size = 10) { arr = new int[size]; capacity = size; front = 0; rear = 0; count = 0; }
// 析构函数 ~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; }};
3. 使用示例
下面是一个简单的测试代码,演示如何使用这个队列:
int main() {
Queue q(5); // 创建容量为5的队列
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;}
4. 关键点说明
- 循环数组:通过
(rear + 1) % capacity实现索引循环,节省空间 - count变量:用来区分空和满状态,避免front == rear时的歧义
- 异常处理:getFront 和 dequeue 操作前应检查是否为空
- 内存管理:动态分配数组,记得在析构函数中释放
基本上就这些。这个实现适合学习理解队列原理。实际开发中也可以使用 STL 的 std::queue,但手写有助于掌握底层机制。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















