一、说明
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/aedced5ca9c033a1104e17d8ae3ab666.png)
二、代码
main.cpp
#include <iostream>
#include "LinkedQueue.h"
using namespace std;
int main()
{
cout << "链式队列:" << endl;
LinkedQueue<int> linkedQueue;
linkedQueue.EnQueue(10);
linkedQueue.EnQueue(20);
linkedQueue.EnQueue(30);
cout<<linkedQueue.GetFront()<<endl;
linkedQueue.DeQueue();
cout<<linkedQueue.GetFront()<<endl;
return 0;
}
LinkedQueue.h
#ifndef LINKEDQUEUE.H
#define LINKEDQUEUE.H
template <class Type> class LinkedQueue;
/*链式队列节点类*/
template <class Type>
class QueueNode
{
friend class LinkedQueue<Type>;
private:
Type data;
QueueNode<Type> *next;
QueueNode(const Type &theData,QueueNode *n = 0)//构造函数。创建新的节点的数据
{
data = theData;
next = n;
}
};
/*链式队列类*/
template <class Type>
class LinkedQueue
{
public:
LinkedQueue();//构造函数
~LinkedQueue();//析构函数
bool IsEmpty() const;//判空
const Type & GetFront() const;//取得队首元素
void EnQueue(const Type &);//入队函数
Type DeQueue();//出队函数
void MakeEmpty();//置空函数
private:
QueueNode<Type> *front;//队首指针
QueueNode<Type> *back;//队尾指针
};
/*链式队列类:构造函数*/
template <class Type>
LinkedQueue<Type>::LinkedQueue()
{
front = back = 0;//空链表
}
/*链式队列类:析构函数*/
template <class Type>
LinkedQueue<Type>::~LinkedQueue()
{
MakeEmpty();
}
/*链式队列类:判空函数*/
template <class Type>
bool LinkedQueue<Type>::IsEmpty() const
{
return front == 0;
}
/*链式队列类:取得队首元素函数*/
template <class Type>
const Type & LinkedQueue<Type>::GetFront() const
{
if(IsEmpty())
{
throw "Linked Queue is empty.";
}
return front->data;
}
/*链式队列类:入队函数*/
template <class Type>
void LinkedQueue<Type>::EnQueue(const Type &x)
{
if(IsEmpty())
{
back = front = new QueueNode<Type>(x);//调用构造函数创建一个新节点
}else
{
back = back->next = new QueueNode<Type>(x);
}
}
/*链式队列类:出队函数*/
template <class Type>
Type LinkedQueue<Type>::DeQueue()
{
Type frontItem = GetFront();
QueueNode<Type> *old = front;//为了delete操作
front = front ->next;
delete old;
return frontItem;
}
/*链式队列类:队列置空*/
template <class Type>
void LinkedQueue<Type>::MakeEmpty()
{
while(!IsEmpty())
{
DeQueue();
}
}
#endif // LINKEDQUEUE