1. 程式人生 > >C++佇列及其操作

C++佇列及其操作

佇列(Queue)也是一種限定存取位置的線性表。它只允許在表的一端插入,而在另一端刪除。

允許插入的一端稱為隊尾(rear),允許刪除的一端叫做隊頭(front)。每次在隊尾加入新元素,加入稱為進隊,刪除稱為出隊。(檢視動畫演示)

佇列的這種特性正好與棧相反,叫做先進先出(FIFO,First In First Out)。

順序佇列

空隊時指標(下標)front和rear在一起都指向隊前方,當有元素進隊,則rear後移;有元素出隊,則front後移,最後,開始時分配給隊的前端不再被利用。(檢視動畫演示)

為了充分利用佇列,順序佇列總是做成一個邏輯上的迴圈佇列。

注意:空隊時rear等於front,滿隊時必須空一個位置。



順序迴圈佇列類模板

template<typename T>class Queue
{
       int rear,front; //隊尾與隊頭下標
       T *elements; //存放佇列元素的容器
       int maxSize; //佇列最多可容納元素個數+1
public:
       Queue(int ms=18);
       ~Queue()
       {
              delete[] elements;
       }
       bool IsEmpty() const //判隊空
       {
              return front==rear;
       }
       bool IsFull() const //判隊滿
       {
              return (rear+1)%maxSize==front;
       }
       int Length() const  //求隊中元素數,注意求餘演算法
       {
              return (rear-front+maxSize)%maxSize;
       }
     
       void EnQue(const T &data); //進隊
       T DeQue(); //出隊
       T GetFront(); //取隊頭資料
       void MakeEmpty()//隊置空(初始態)
       {
              front=rear=0;
       }
      
};

更詳細的程式碼參見【例7.10】。

鏈佇列類模板示例:請參見【例7.11】。