队列类模板

原创 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

 

队列的基本操作——链式队列的类模板定义

定义      队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表   (1)允许删除的一端称为队头(Front)。   (2)允许插入的一端称为队尾(Rear)。   (...
  • poison_biti
  • poison_biti
  • 2016年06月13日 17:16
  • 361

[数据结构]队列之链式队列的类模板实现

链式队列是基于单链表的一种存储表示 队列的对头指针指向单链表的第一个节点,队尾指针指向单链表的最后一个节点, 退出一个元素 则删除对头指针的节点,添加元素则在队尾增加一个节点 使用条件:数据元素...
  • u013467442
  • u013467442
  • 2015年06月23日 16:06
  • 859

C++利用模板实现一个队列

开头总结:.利用模板类实现了一个队列,利用模板的好处是提供泛型编程,在存储数据的时候会适应不同类型的数据,减少了代码的书写,简化了程序的结构。#include using namespace std...
  • bao2516090
  • bao2516090
  • 2015年09月19日 19:40
  • 1850

c++队列类模板的实现

//队列类模板定义 template class VarQueue { public: VarQueue() { m_MaxCount=MAX_POINTS; m_Count=0; ...
  • baliguan163
  • baliguan163
  • 2014年07月11日 00:55
  • 3987

C++模板实现链表队列

队列是一种十分常见的数据结构,具有先进先出的特点.队列在处理消息时,非常常用.本文利用C++,模板,链表来实现一个简单的队列....
  • luanzheng_365
  • luanzheng_365
  • 2017年03月21日 21:18
  • 434

[数据结构]队列之链式队列的类模板实现

链式队列是基于单链表的一种存储表示 队列的对头指针指向单链表的第一个节点,队尾指针指向单链表的最后一个节点, 退出一个元素 则删除对头指针的节点,添加元素则在队尾增加一个节点 使用条件:数据元素...
  • u013467442
  • u013467442
  • 2015年06月23日 16:06
  • 859

队列的类模板

队列是只能向一端添加元素,从另一端删除元素的线性群体 队列的基本状态: 队空 队满 一般状态 队列类模板: //Queue.h #ifndef QU...
  • u013232740
  • u013232740
  • 2015年06月16日 15:48
  • 352

优先队列的使用(模板)

这个是转得网上的,由于不经常使用,偶尔用的时候还经常出错,所以记下来了,经常使用的已经用红色颜色标出来了 : 在优先队列中,优先级高的元素先出队列。 标准库默认使用元素类型的 优先队列的第一种用...
  • u013486414
  • u013486414
  • 2014年11月15日 16:44
  • 795

【C++】 C++标准模板库(十) 双向队列

1. C++ Double Ended Queues(双向队列)双向队列和向量很相似,但是它允许在容器头部快速插入和删除(就像在尾部一样)。Constructors创建一个新双向队列Operators...
  • dengjin20104042056
  • dengjin20104042056
  • 2017年01月06日 22:47
  • 322

C++第7周项目4 - 复数模板类

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijia...
  • sxhelijian
  • sxhelijian
  • 2013年04月13日 08:42
  • 3174
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:队列类模板
举报原因:
原因补充:

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