#ifndef QUEUE_H_
#define QUEUE_H_
template<class T>
class Queue
{
public:
Queue();
~Queue();
bool isEmpyt()const;
const T &getFront()const;//返回队首的数据
void enqueue(const T &x);//将数据放入队里 先进先出
T dequeue();//出对 删除队首的数据
void makeEmpyt();//清空整个队列
private:
struct ListNode
{
T element;
ListNode *next;
ListNode(const T &theElement,ListNode *n=0):element(theElement),next(n){}
};
ListNode *front;
ListNode *back;
};
/*--------------------------*/
template<class T>
Queue<T>::Queue()
{
front = back = 0;
}
template <class T>
Queue<T>::~Queue()
{
makeEmpyt();
}
template <class T>
bool Queue<T>::isEmpyt()const
{
return front ==0;
}
template<class T>
const T & Queue<T>::getFront()const
{
if(isEmpyt())
std::cerr<<"空队列";
else
return front->element;
}
template<class T>
void Queue<T>::enqueue(const T &x)
{
if(isEmpyt())
back=front = new ListNode(x);
else
back = back->next = new ListNode(x);
}
template<class T>
T Queue<T>::dequeue()
{
T frontItem = getFront();
ListNode *old = front;
front = front->next;
delete old;
return frontItem;
}
template<class T>
void Queue<T>::makeEmpyt()
{
while(!isEmpyt())
{
dequeue();
}
}
#endif
#include <iostream>
#include "queue.h"
using namespace std;
int main()
{
cout << "测试"<<endl;
Queue<int> q;
q.enqueue(10);
q.enqueue(20);
q.enqueue(30);
cout<< q.getFront()<< endl;
q.dequeue();
cout<< q.getFront()<< endl;
return 0;
}