数据结构队列基本实现

        队列是一种操作受限的线性表。在这种线性表上,插入操作限定在表的某一端进行,删除限定在表的另一端进行。允许插入的一端为队尾,允许删除的一端为对头。队列按照存储方式分为两种,分别是顺序存储和链式存储。其中顺序存储方式的队列为循环队列。

废话不多说,直接上代码,下面是是我简单实现的队列的两种模式,顺序和链式,采用C++语言,在Qt5.9.0下编译成功。

#include "queue.h"

#ifndef QUEUE_H
#define QUEUE_H

#include <iostream>

#define MaxSize 100
#define ERROR   0
#define OK      1
typedef int size_type;
typedef unsigned status_type;

template <class QElemType>
class Queue
{
    template<class T>
    friend std::ostream &operator<<(std::ostream &output, const Queue<T> &Q);
public:
    Queue();//构造函数
    Queue(size_type size);
    Queue(const Queue<QElemType> &Q);//拷贝构造
    ~Queue();

    status_type EnQueue(QElemType x);//入队
    status_type Full();//判断队列是否已满
    status_type Empty();//判空函数
    size_type Size() const;
    status_type OutQueue(QElemType *x);//出队
    status_type GetHeadQueue(QElemType *x);//取队头
    QElemType Front()const;
    QElemType& Front();

    Queue<QElemType>& operator=(const Queue<QElemType> &Q);

private:
    QElemType *m_Data;
    size_type m_Front;
    size_type m_Rear;
    size_type m_size;
};

#endif // QUEUE_H

#include "queue.cpp"

#include "queue.h"
#include <cassert>

template <class QElemType>
Queue<QElemType>::Queue():m_Front(0),m_Rear(0),m_size(MaxSize + 1)
{
    m_Data = new QElemType[MaxSize + 1];
    assert(m_Data != NULL);
}

template <class QElemType>
Queue<QElemType>::Queue(size_type size):m_Front(0),m_Rear(0),m_size(size + 1)
{
    m_Data = new QElemType[size + 1];
    assert(m_Data != NULL);
}

template <class QElemType>
Queue<QElemType>::Queue(const Queue<QElemType> &Q):
    m_Front(Q.m_Front),m_Rear(Q.m_Rear),m_size(Q.m_size)
{
    m_Data = new QElemType[m_size];
    assert(m_Data != NULL);
    for (int i = 0; i < Q.Size(); i++)
    {
        m_Data[(m_Front + i + 1) % m_size] = Q.m_Data[(Q.m_Front + i + 1) % Q.m_size];
    }
}

template <class QElemType>
Queue<QElemType>::~Queue()
{
    delete []m_Data;
}

template<class QElemType>
Queue<QElemType>& Queue<QElemType>::operator=(const Queue<QElemType> &Q)
{
    if (this != &Q)
    {
        delete []m_Data;
        m_Front = Q.m_Front;
        m_Rear  = Q.m
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值