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】。