顺序队列类定义

// abstract data type for queue
template <class T>
class Queue
{
public:                              // 队列的运算集
    void clear();                    // 变为空队列
    bool enQueue(const T& item);     // item入队,插入队尾,成功则返回真否则返回假
    bool deQueue(T& item);           // 返回队头元素并从队列中删除,成功则返回真
    bool front(T& item);             // 返回队头元素,但不删除,成功则返回真
    bool isEmpty();                  // 返回真,若队列已空
    bool isFull();                   // 返回真,若队列已满
};


template <class T>
class arrQueue: public Queue<T>
{
private:
    int     mSize;                   // 存放队列的数组的大小
    int     itemCount;               // 存放队列中数组实际个数
    int     front;                   // 表示队头所在位置的下标
    int     rear;                    // 表示队尾所在位置的下标
    T         *qu;                   // 存放类型为T的队列元素的数组
public:                              // 队列的运算集
    arrQueue(int size)               // 创建队列的实例
    {
        mSize = size;                // 浪费一个存储空间,以区别队列空和队列满
        qu = new T[mSize];
        front = rear = 0;
        itemCount = 0;
    }
    ~arrQueue()                      // 消除该实例,并释放其空间
    {
        delete []qu;
    }
    void clear()                     // 清空队列
    {
        front = rear;
        itemCount = 0;
    }
    bool enQueue(const T item)       // item入队,插入队尾
    {
        if (itemCount == mSize)
        {
            cout << "The queue is Full!" << endl;
            return false;
        }
        qu[rear] = item;
        rear = (rear +1) % mSize;    // 循环后继
        ++itemCount;
        return true;
    }
    bool deQueue(T*item)             // 返回队头元素并从队列中删除
    {
        if ( 0 == itemCount)
        {
            cout << "The queue is empty!" << endl;
            return false;
        }
        *item = qu[front];
        front = (front +1) % mSize;
        --itemCount;
        return true;
    }
    bool getFront(T* item)           // 返回队头元素,但不删除
    {
        if (0 == itemCount)
        {
            cout << "The queue is empty!" << endl;
            return false;
        }
        *item = qu[front];
        return true;
    }
    void print()                     // 打印队列中的所有元素
    {
        if (0 == itemCount)
        {
            cout << "The queue is empty" << endl;
        }
        int p = front;
        for(int i = 0; i < itemCount; i++)
        {
            cout << qu[p+i] << " ";
        }
    }
};

你可能感兴趣的:(代码)