佇列(queue)的模板類及其成員函式的實現
阿新 • • 發佈:2019-02-19
佇列(queue)是先進先出的資料結構,儲存方式可以是陣列也可以是連結串列。如果用陣列儲存,一般採用迴圈佇列的方式。
所以需記住幾個關鍵點:
隊頭指標進1:front = (front+1)%maxsize
隊尾指標進1:rear = (rear+1)%maxsize
判斷隊空:front = rear
判斷隊滿:front = (rear+1)%maxsize,這裡,隊滿的時候隊尾和隊頭之間空有一個元素,以此來避免和front=rear混淆
定義標頭檔案
成員函式的實現/*佇列用陣列儲存的一般用迴圈佇列 front = (front+1)%maxsize rear = (rear+1)%maxsize 隊頭指向儲存的第一個元素,而隊尾指向的是儲存的最後一個元素的下一個位置 所以,在佇列滿的時候,隊頭和隊尾之間是空有一個元素的,否則當front==rear時, 會混淆滿隊和空隊 空隊:front == rear 滿隊:(rear+1)%maxsize ==front */ #include <assert.h> #include<iostream> using namespace std; template<class T> class SeqQueue{ public: SeqQueue(int sz=50); ~SeqQueue(); bool EnQueue(const T& x); bool DeQueue(); T getFront(); //獲取隊頭元素 bool makeEmpty(){front = rear =0; return true;} bool isEmpty()const{return (front==rear)?true:false;} bool isFull()const{return ((rear+1)%maxsize==front)?true:false;} int getsize()const{return (rear-front+maxsize)%maxsize;} //獲取佇列元素個數 private: int front,rear; T* element; int maxsize; };
#include "queue.h" template<class T> SeqQueue<T>::SeqQueue(int sz):maxsize(sz):front(0):rear(0){ element = new T[maxsize]; assert(element!=NULL); } template<class T> bool SeqQueue<T>::EnQueue(const T& x){ if(isFull()==true)return false; element[rear]=x; rear = (rear+1)%maxsize; return true; } template<class T> bool SeqQueue<T>::DeQueue(){ if(isEmpty()==true)return false; T x = element[front]; front = (front+1)%maxsize; delete x; return true; } template<class T> T SeqQueue<T>::getFront(){ if(isEmpty()==true)return -1; return element[front]; }