LinkQueue.h
#pragma once
#include "LinkQueue.h"
using namespace std;
template<class T>
class LinkQueue
{
public:
LinkQueue();
~LinkQueue();
bool IsEmpty() const;
const T& GetFront() const;
void EnterQueue(const T& element);
T DelQueue();
void MakeEmpty();
private:
//不用友元类用嵌套结构体首先
struct ListNode
{
T data;
ListNode *next;
ListNode(const T& theData, ListNode* node=0):data(theData), next(node){}
};
ListNode* front;
ListNode* back;
};
template<class T>
LinkQueue<T>::LinkQueue()
{
front = back = 0;
}
template<class T>
LinkQueue<T>::~LinkQueue()
{
MakeEmpty();
}
template<class T>
bool LinkQueue<T>::IsEmpty() const
{
return (front == 0);
}
template<class T>
const T& LinkQueue<T>::GetFront() const
{
if(IsEmpty())
throw "Queue is empty";
return front->data;
}
template<class T>
void LinkQueue<T>::EnterQueue(const T& element)
{
if(IsEmpty())
back = front = new ListNode(element);
else
back = back->next = new ListNode(element);
}
template<class T>
T LinkQueue<T>::DelQueue()
{
T temp = GetFront();
ListNode *old = front;
front = front->next;
delete old;
return temp;
}
template<class T>
void LinkQueue<T>::MakeEmpty()
{
while(!IsEmpty())
{
DelQueue();
}
}
main.h
#include <iostream>
#include "LinkQueue.h"
int main()
{
LinkQueue<int> Queue;
Queue.EnterQueue(10);
Queue.EnterQueue(20);
Queue.EnterQueue(30);
cout << Queue.GetFront() << endl;
cout << Queue.DelQueue() << endl;
cout << Queue.GetFront() << endl;
return 0;
}