template <class T>
class CirQueue {
public:
CirQueue(int size) {
elements = new T[size];
MaxSize = size;
front = 0;
tail = 0;
}
~CirQueue()
{
delete[]elements;
}
bool IsFull() {
if ((tail+1) % MaxSize == front) {//tail指向的是末尾元素的下一个(即为空位),由于是循环,要“%MaxSize”
cout << "队列已满!" << endl;
return 1;
}
return 0;
}
bool IsEmpty() {
if (front == tail) {//不能够非满则空,我以前好像这么写过..
cout << "队列已空!" << endl;
return 1;
}
return 0;
}
int length() {
return (tail-front+MaxSize)%MaxSize;//由于tail-front可能为负数,所以+MaxSize再%MaxSize相当于取绝对值 其中由于tail所在位置为空格,才不用tail-front+1
}
void pop() {
if (IsEmpty())
return;
++front;
front %= MaxSize;
}
void push(T a) {
if (IsFull())
return;
elements[tail] = a;
++tail;//由于他为空格,所以先赋值再往后退
tail = tail % MaxSize;
}
T top() {
if (IsEmpty())
return -1;
return elements[front];//返回的是元素值而不是队列头指针,以前好像也这么写过..
}
void clear() {
front = 0;//相当于初始化
tail = 0;
}
private:
T* elements;
int front,tail;
int MaxSize;
};
循环队列的类的建立
C++环形队列实现:详解与关键操作
最新推荐文章于 2025-12-03 14:22:43 发布
本文介绍了一个使用C++模板实现的循环队列CirQueue,包括构造函数、判断队列满/空、获取长度、入队出队操作以及清空队列。重点讲解了队列的内部逻辑和循环机制。
457

被折叠的 条评论
为什么被折叠?



