📄 queue.h
字号:
/* Queue.h */
#include <iostream>
#include<vector>
using namespace std ;
const int nDefaultQueueSize = 50;
template <class T>
class Queue {
private:
vector<T> vqueue; //存放队列元素的指针(数组)
int size; //队列大小(容量)
int front; //队首位置
int rear; //队尾位置(最后一个元素的下一位置)
int count; //队列中元素的个数
public:
//构造函数
Queue(){
int initSize = nDefaultQueueSize;
for(int i=0;i< initSize;i++)
vqueue.push_back(0) ;
front = 0;
rear = 0;
count = 0;
size = initSize;
}
//带队列大小参数的构造函数
Queue(int initSize);
//析构函数
~Queue() {
while (vqueue.capacity()!=0)
vqueue.pop_back();
front = 0;
rear = 0;
count = 0;
size = 0;
}
//判断队列是否为空
int QEmpty() ;
//判断队列是否已满
int QFull() ;
//队列长度
int QLength() ;
//队尾插入(追加)元素
void enqueue(const T &item) ;
//队首删除元素
T dequeue(T &data);
//读取队首元素
T QFront(T &data) ;
//清空队列
void ClearQueue() ;
//显示所有的元素
void display() ;
};
template<class T> Queue<T>:: Queue(int initSize) {
if (initSize < 1)
initSize = nDefaultQueueSize;
for(int i=0;i< initSize;i++)
vqueue.push_back(0) ;
front = 0;
rear = 0;
count = 0;
size = initSize;
}
template<class T> //判断队列是否为空
int Queue<T>:: QEmpty() {
return rear==front;
}
template<class T> //判断队列是否已满
int Queue<T>:: QFull() {
return (rear+1) % size == front;
//return count == size;
}
template<class T> //队列长度
int Queue<T>:: QLength() {
return (rear - front + size) % size;
}
template<class T> //队尾插入(追加)元素
void Queue<T>:: enqueue(const T &item) {
if (count == size-1) {
cerr << "队列已满,无法再追加元素。"
<< endl;
return;
}
count ++;
vqueue[rear] = item;
rear = (rear + 1) % size; //rear始终指向最后一个元素的下一个位置
}
template<class T> //队首删除元素
T Queue<T>:: dequeue(T &data) {
if (count > 0) {
data = vqueue[front];
count --;
front = (front + 1) % size; //front移向下一位置
}
else
cerr << "队列已空,无法继续删除。" << endl;
return data;
}
template<class T> //读取队首元素
T Queue<T>:: QFront(T &data) {
if (count > 0)
data =vqueue[front];
else
cerr << "队列为空,无法读取队首元素的值。" << endl;
return data;
}
template<class T> //清空队列
void Queue<T>:: ClearQueue() {
front = 0;
rear = 0;
count = 0;
}
template<class T> //显示输出队列元素
void Queue<T>::display(){
int j=front ;
cout<<"循环队列的内容是:"<<endl ;
for(int i=0;i<count; i++){
cout<<vqueue[j] <<endl ;
j=(j+1)%size ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -