数据结构学习:环形队列的模板类实现

参考:http://www.imooc.com/learn/519

队列机制:先进先出 FIFO(first in first out)
队列结构:普通队列&环形队列
普通队列结构
环形队列结构

环形队列的好处:解决了普通队列浪费内存的问题!

下面是我用模板类实现的一个环形队列:

#pragma once
#ifndef QUEUE_H
#define QUEUE_H

template<typename T>
class Queue {
private:
    T *m_pQueue;//队列指针
    int m_iQueueLen;//队列元素个数
    int m_iQueueCapacity;//队列容量
    int m_iHead;//队首位置
    int m_iTail;//队尾位置
public:
    Queue(int queueCapacity);//创建队列
    virtual ~Queue();//销毁队列
    void clearQueue();//清空队列
    bool isEmpty();//判空
    bool isFull();//判满
    int getLength();//获取队列长度
    bool enQueue(T element);//新元素入队
    bool deQueue(T &element);//首元素出队
    void traverseQueue();//遍历队列
    T getHead();//访问队首元素
    T getTail();//访问队尾元素
};
#endif QUEUE_H

template<typename T>
Queue<T>::Queue(int queueCapacity)
{
    m_iQueueCapacity = queueCapacity;
    m_iHead = 0;
    m_iTail = 0;
    m_iQueueLen = 0;
    m_pQueue = new T[m_iQueueCapacity];
}

template<typename T>
Queue<T>::~Queue() 
{
    delete []m_pQueue;
    m_pQueue = NULL;
}

template<typename T>
void Queue<T>::clearQueue() 
{
    m_iHead = 0;
    m_iTail = 0;
    m_iQueueLen = 0;
}

template<typename T>
bool Queue<T>::isEmpty() 
{
    return m_iQueueLen == 0 ? true : false;
}

template<typename T>
bool Queue<T>::isFull() 
{
    return m_iQueueLen == m_iQueueCapacity ? true : false;
}

template<typename T>
int Queue<T>::getLength() 
{
    return m_iQueueLen;
}

template<typename T>
bool Queue<T>::enQueue(T element) 
{
    if (isFull())
        return false;
    else {
        m_pQueue[m_iTail] = element;
        m_iTail++;
        m_iQueueLen++;
        m_iTail = m_iTail % m_iQueueCapacity;
        return true;
    }
}

template<typename T>
bool Queue<T>::deQueue(T &element) 
{
    if (isEmpty())
        return false;
    else {
        element = m_pQueue[m_iHead];
        m_iHead++;
        m_iQueueLen--;
        m_iHead = m_iHead % m_iQueueCapacity;
        return true;
    }
}

template<typename T>
void Queue<T>::traverseQueue() 
{
    for (int i = m_iHead; i < m_iHead + m_iQueueLen; i++) {
        cout << m_pQueue[i%m_iQueueCapacity] << endl;
    }
}

template<typename T>
T Queue<T>::getHead()
{
    return m_pQueue[m_iHead];
}

template<typename T>
T Queue<T>::getTail()
{
    if (m_iTail == 0)
        return m_pQueue[m_iQueueCapacity - 1];
    return m_pQueue[m_iTail-1];
}  

如有不足,欢迎指正!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值