队列类模板

原创 2007年10月04日 21:20:00

#ifndef QUEUE_CLASS
#define QUEUE_CLASS
#include <iostream>
#include <cstdlib>
using namespace std;

const int MaxQSize = 50; //队列元素最大个数

//类的声明
template <class T>
class Queue
{
    private:
        int front, rear, count; //队头指针、队尾指针、元素个数
        T qlist[MaxQSize]; //队列元素数组

    public:
        Queue (void);          //构造函数,初始化队头指针、队尾指针、元素个数
        void QInsert(const T& item); //新元素入队
        T QDelete(void); //元素出队
        void ClearQueue(void); //清空队列
       
        T QFront(void) const; //访问队首元素
       
        // 测试队列状态
        int QLength(void) const; //求队列长度(元素个数)
        int QEmpty(void) const; //判队队列空否
        int QFull(void) const; //判断队列满否
};

// 构造函数,初始化队头指针、队尾指针、元素个数
template <class T>
Queue<T>::Queue (void) : front(0), rear(0), count(0)
{}

template <class T>
void Queue<T>::QInsert (const T& item) //向队尾插入元素(入队)
{
    if (count == MaxQSize) // 如果队满,中止程序
    {
        std::cerr << "Queue overflow!" << endl;
        exit(1);
    }
    count++; //元素个数增1
    qlist[rear] = item; //向队尾插入元素
    rear = (rear+1) % MaxQSize; //队尾指针增1,用取余运算实现循环队列
}

template <class T>
T Queue<T>::QDelete(void) //删除队首元素,并返回该元素的值(出队)
{
    T temp;
    if (count == 0) // 如果队空,中止程序
    {
        std::cerr << "Deleting from an empty queue!" << endl;
        exit(1);
    }
    temp = qlist[front]; // 记录队首元素值
    count--; // 元素个数自减
    front = (front+1) % MaxQSize; //队首指针增1。取余以实现循环队列
    return temp; //返回首元素值
}

template <class T>
T Queue<T>::QFront(void) const // 访问队列首元素(返回其值)
{    return qlist[front];  }

template <class T>
int Queue<T>::QLength(void) const // 返回队列元素个数
{    return count;  }

template <class T>
int Queue<T>::QEmpty(void) const // 测试队空否
{    return count == 0;  } //返回逻辑值 count == 0

template <class T>
int Queue<T>::QFull(void) const // 测试队满否
{    return count == MaxQSize;  } // 返回逻辑值 count == MaxQSize

template <class T>
void Queue<T>::ClearQueue(void) // 清空队列
{
    count = 0;
    front = 0;
    rear = 0;
}
   
#endif  // QUEUE_CLASS

 

相关文章推荐

队列模板类

  • 2017年03月14日 14:13
  • 5KB
  • 下载

c++模板类队列

  • 2014年03月01日 22:34
  • 2KB
  • 下载

C++模板类实现“堆”的经典案例学习+(优先队列)

本文转自:《C++程序设计》   Y. Daniel  Liang著  王刚,刘晓光,刘璟 译, 机械工业出版社              简单介绍堆的概念:堆,实际上就是一颗完全二叉树,它的每个节...

队列模板类

  • 2012年10月30日 10:56
  • 514KB
  • 下载

C++ Primer 之队列类模板

/* * author:xizero00 * mail:xizero00@163.com * date:2011-08-08 01:34:33 * Template Queue Sam...

C++类模板实现的队列

  • 2011年12月21日 15:01
  • 715KB
  • 下载

数据结构(C++)最小优先权队列实现<模板类>

1.优先级队列: 每一次都能取出队列中的具有最高优先权的元素,这种队列就是优先级队列。 2.代码实现 模板类PQueue: #ifndef PQUEUE_H #define PQUEU...
  • Gpwner
  • Gpwner
  • 2017年02月10日 11:04
  • 180

数据结构之循环队列(顺序表存储)——C++模板类实现

基于数组存储形式的循环队列实现  循环队列的基于数组的存储表示亦称为顺序队列,用一个一维数组elem[maxSize]来实现,其中为了区别队列空与满,该数组中最多存储maxSize-1个元素,如此一来...
  • Mrx_Nh
  • Mrx_Nh
  • 2017年03月11日 14:00
  • 226

C++ 类模板 队列基本操作

#include #include using namespace std; template class QueuePtr { public: QElemType data; QueuePtr...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:队列类模板
举报原因:
原因补充:

(最多只允许输入30个字)