队列,又称为伫列(英文queue),与栈想反,是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。
队列的操作方式和栈类似,唯一的区别在于队列只允许新数据在后端进行添加。
队列的架构设计如下:
抽象队列的实现如下:
class Queue : public virtual Container
{
public:
virtual Object& Head () const = 0;
virtual void Enqueue (Object&) = 0;
virtual Object& Dequeue () = 0;
};
队列的动态数组实现方式:
class QueueAsArray : public virtual Queue
{
protected:
Array<Object*> array;
unsigned int head;
unsigned int tail;
public:
QueueAsArray (unsigned int size);
void Purge ();
void Accept (Visitor& visitor) const;
~QueueAsArray ();
// ...
Object& Head () const;
void Enqueue (Object& obj);
Object& Dequeue ();
};
QueueAsArray::QueueAsArray( unsigned int size ):
array (size),
head (0),
tail (size - 1U)
{
count=0;
}
void QueueAsArray::Purge()
{
if (IsOwner ())
{
for (unsigned int i = 0; i < count; ++i)
{
delete array [head];
if (++head == array.Length ())
{
head = 0;