用循环方式实现双端队列,使用C++
时间: 2024-09-19 17:15:48 浏览: 42
在C++中,可以使用STL库中的`std::deque`(双向队列)来创建一个动态的、可从两端添加或删除元素的数据结构。如果你想手动实现一个简单的双端队列,通常会涉及到两个指针,一个指向队首(front),一个指向队尾(rear)。以下是使用循环方式实现一个基础的双端队列的示例:
```cpp
template <typename T>
class CircularQueue {
private:
int capacity;
T* front; // 指向队首元素
T* rear; // 指向队尾元素
public:
// 构造函数
CircularQueue(int size) : capacity(size), front(0), rear(0) {}
// 插入元素到队尾
void enqueue(T value) {
if ((rear + 1) % capacity == front) { // 队满
throw std::runtime_error("Queue is full");
}
rear = (rear + 1) % capacity; // 向后移动指针
*rear = value;
}
// 从队首删除元素
void dequeue() {
if (front == rear) { // 队空
throw std::runtime_error("Queue is empty");
}
front = (front + 1) % capacity; // 后移指针
}
// 查看队首元素
T front() const {
if (front == rear) {
throw std::runtime_error("Queue is empty");
}
return *front;
}
// 判断队列是否为空
bool isEmpty() const {
return front == rear;
}
// 判断队列是否已满
bool isFull() const {
return (rear + 1) % capacity == front;
}
};
// 示例使用
int main() {
CircularQueue<int> cq(5);
cq.enqueue(1); cq.enqueue(2); cq.enqueue(3);
try {
cq.dequeue(); // 输出1
cq.front(); // 输出2
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << '\n';
}
return 0;
}
```
阅读全文