C++设计一个循环队列QUEUE<T>
时间: 2023-05-24 13:05:14 浏览: 97
以下是一个简单的循环队列QUEUE<T>的设计:
```c
template <typename T>
class QUEUE {
private:
int front, rear; // 队首和队尾指针
T* data; // 存储元素的数组
int capacity; // 队列容量
public:
QUEUE(int capacity) : front(0), rear(0), capacity(capacity) {
data = new T[capacity];
}
~QUEUE() {
delete[] data;
}
bool is_empty() const {
return front == rear;
}
bool is_full() const {
return (rear + 1) % capacity == front;
}
bool push(const T& val) {
if (is_full())
return false;
data[rear] = val;
rear = (rear + 1) % capacity;
return true;
}
bool pop(T& val) {
if (is_empty())
return false;
val = data[front];
front = (front + 1) % capacity;
return true;
}
bool front_val(T& val) const {
if (is_empty())
return false;
val = data[front];
return true;
}
};
```
该循环队列使用了一个数组来存储元素,通过两个指针front和rear来表示队首和队尾位置。使用%运算符来实现循环,当队尾指针达到队列末尾时,将回到队列开头。队列的容量由构造函数中传入,队尾指针比队首指针多1时队列即为满。在push和pop中,分别根据队列为空或已满进行判断,若操作成功则移动front和rear指针,并返回true;否则返回false。front_val函数是为了获取队首元素而设计的,不移动队首指针。此外,还包括了is_empty和is_full方法,可以用于判断队列是否为空或已满。
阅读全文