1. 程式人生 > >用c++基於模板實現的可設定容量的佇列(Queue)

用c++基於模板實現的可設定容量的佇列(Queue)

環境介紹

  • c++14標準,clion+mingw編譯成功,vs2008下面編譯也成功

佇列及實現介紹

  • 先進先出的特性
  • 實現時基於陣列的,可以構造時傳入佇列容量
  • 由於基於模板程式設計,佇列可以儲存多種資料型別,便於擴充套件
  • 實現了基本操作:尾部插入、頭部刪除、遍歷

原始碼

  • 程式碼在vs2008上也可以直接執行
#include <iostream>

template <class T> class Queue
{
public:
    Queue(int);
    ~Queue();
    bool Insert(T);
    T Delete();
    void
Destroy(); void Traverse(); private: int max_size; int front; int rear; T* arry; }; template <class T> Queue<T>::Queue(int size) { front = -1; rear = -1; if(size<=0) return; arry = new T[size]; max_size = size; } template <class T>
Queue<T>::~Queue() { delete []arry; } template <class T> bool Queue<T>::Insert(T t) { if(front == -1)//去除size為1的bug,佇列容量為1時,實際上可以插入,但是由於qCount計算為1,等於最大容量,導致不能插入的bug { front++; arry[++rear]=t; return true; } int qCount = abs(rear-front)+1
; if(qCount==max_size)//先判滿 { std::cout<<"queue is full!"<<std::endl; return false; } rear = (rear+1)%max_size; arry[rear] = t; if(front == -1) front++; return true; } template <class T> T Queue<T>::Delete() { int qCount = abs(rear-front)+1; if(rear == front && qCount != max_size)//隊中只有一個元素,直接變空佇列 { T tmp = arry[front]; front = -1; rear = -1; return tmp; } front = (front+1)%max_size;//不止一個元素 return arry[front]; } template <class T> void Queue<T>::Destroy() { delete []arry; } template <class T> void Queue<T>::Traverse() { if(front == -1) { std::cout<<"queue is empty!"<<std::endl; return; } int f = front; int r = rear; while(f != r) { std::cout<<arry[(f++)%max_size]<<std::endl; } std::cout<<arry[f]<<std::endl; } int main() { Queue<int> q(3); q.Insert(1); q.Insert(2); q.Insert(3); q.Traverse(); q.Delete(); q.Delete(); q.Delete(); q.Traverse(); system("pause"); return 0; }