循环队列深度解析:从基础实现到工业级优化
循环队列核心特性
graph TD
A[循环队列] --> B[固定容量]
A --> C[高效空间复用]
A --> D[O(1)操作复杂度]
B --> E[避免内存碎片]
C --> F[解决假溢出问题]
D --> G[适合高频操作场景]
一、现代C++循环队列实现
模板类实现(动态扩容版)
#include <iostream>
#include <vector>
#include <stdexcept>
template <typename T>
class CircularQueue {
private:
std::vector<T> data;
size_t front = 0;
size_t rear = 0;
bool fullFlag = false;
void resize(size_t newCapacity) {
std::vector<T> newData(newCapacity);
size_t size = this->size();
for(size_t i=0; i<size; ++i) {
newData[i] = data[(front + i) % data.capacity()];
}
data = std::move(newData);
front = 0;
rear = size;
fullFlag = false;
}
public:
explicit CircularQueue(size_t initialCapacity = 10) {
data.resize(initialCapacity);
}
bool empty() const {
return !fullFlag && (front == rear);
}
bool full() const {
return fullFlag;
}
size_t capacity() const {
return data.capacity();
}
size_t size() const {
if(fullFlag) return data.capacity();
return (rear >= front) ? (rear - front) : (data.capacity() - front + rear);
}
void enqueue(const T& value) {
if(fullFlag) {
resize(data.capacity() * 2);
}
data[rear] = value;
rear = (rear + 1) % data.capacity();
fullFlag = (rear == front);
}
T dequeue() {
if(empty()) {
throw std::runtime_error("Dequeue from empty queue");
}
T val = data[front];
front = (front + 1) % data.capacity();
fullFlag = false;
return val;
}
const T& peek() const {
if(empty()) {
throw std::