c++循环队列的入队出队代码
时间: 2024-10-11 09:01:51 浏览: 38
C++中的循环队列是一种特殊的线性表,它在队列的一端进行插入操作,在另一端进行删除操作,当一端满了之后,元素会从另一端开始存储,形成一个循环的效果。下面是一个简单的单向循环队列的入队(enqueue)和出队(dequeue)实现示例:
```cpp
template <typename T>
class CircularQueue {
private:
std::size_t front; // 队头指针
std::size_t rear; // 队尾指针
T* queue; // 存储数据的动态数组
const std::size_t capacity;
public:
CircularQueue(std::size_t size) : front(0), rear(0), queue(new T[size]), capacity(size) {}
~CircularQueue() {
delete[] queue;
}
bool isFull() const {
return (rear + 1) % capacity == front; // 如果后一位等于前一位加1对容量取模,则满
}
bool isEmpty() const {
return front == rear; // 如果队头等于队尾,则空
}
void enqueue(T value) {
if (isFull()) {
throw std::overflow_error("Queue is full");
}
queue[rear] = value;
rear = (rear + 1) % capacity; // 循环更新队尾指针
}
T dequeue() {
if (isEmpty()) {
throw std::underflow_error("Queue is empty");
}
T value = queue[front];
front = (front + 1) % capacity; // 循环更新队头指针
return value;
}
};
// 使用示例
int main() {
CircularQueue<int> cq(5); // 创建一个大小为5的循环队列
cq.enqueue(1);
cq.enqueue(2);
cq.enqueue(3);
std::cout << cq.dequeue() << std::endl; // 输出1
std::cout << cq.dequeue() << std::endl; // 输出2
阅读全文