版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014183456/article/details/83182415
先进先出
#ifndef _QueenList_H__
#define _QueenList_H__
template <class T>
class Queue{
public:
Queue();
~Queue();
bool IsEmpty() const;
const T& GetFront()const; //得到队首数据
T dequeue(); //删除队尾数据
void enqueue(const T& e); //入队尾队列
void MakeEmpty();
private:
struct ListNode
{
T element; //节点数据
ListNode *next; //节点指针
ListNode(const T& e,ListNode *n=0):element(e),next(n) {}
};
ListNode *Front; //一个前指针
ListNode *Back; //一个后指针
};
template <class T>
Queue<T>::Queue() //构造函数
{
Front=Back=0;
}
template <class T> //析构函数
Queue<T>::~Queue()
{
MakeEmpty();
}
template <class T>
void Queue<T>::MakeEmpty() //清空
{
}
template <class T>
bool Queue<T>::IsEmpty() const//是否为空
{
return Front==0; //判断队首是否为0
}
template <class T>
const T& Queue<T>::GetFront()const //得到队首数据
{
if(IsEmpty())
throw "Queue is Empty";
return Front->element;
}
template <class T>
void Queue<T>::enqueue(const T& e)//入队尾
{
if(IsEmpty())
Front=Back=new ListNode(e); //如果数据为空 插入一个数据 两个指针指向同一个数
else
Back=Back->next=new ListNode(e); //back向后移动一个
}
template<class T>
T Queue<T>::dequeue() //出队列
{
if(IsEmpty())
throw "Queue is Empty";
T FrontItem=GetFront();
ListNode *temp=Front;
Front=Front->next;
delete temp; //删除temp 对应的new
return FrontItem;
}
#endif // _QueenList_H__
#include <iostream>
#include "QueenList.h"
using namespace std;
int main()
{
Queue<int> q;
q.enqueue(10);
q.enqueue(11);
q.enqueue(12);
q.enqueue(13);
cout<<q.GetFront()<<endl;
cout<<q.dequeue()<<endl;
cout<<q.dequeue()<<endl;
cout<<q.dequeue()<<endl;
cout<<q.dequeue()<<endl;
// cout << "Hello world!" << endl;
return 0;
}