队列是一种操作受限的线性表。在这种线性表上,插入操作限定在表的某一端进行,删除限定在表的另一端进行。允许插入的一端为队尾,允许删除的一端为对头。队列按照存储方式分为两种,分别是顺序存储和链式存储。其中顺序存储方式的队列为循环队列。
废话不多说,直接上代码,下面是是我简单实现的队列的两种模式,顺序和链式,采用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

最低0.47元/天 解锁文章
652

被折叠的 条评论
为什么被折叠?



