?? 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 + -