今天早上给大家带来一个Queen的实现.
#include<exception>
#include<iostream>
using namespace std;
template <class T>
class Queen
{
public:
struct node{
T data;
node* next;
node(const T data = T()):data(data),next(NULL){}
};
Queen(int _max=0):max(_max),size(0),last(NULL)
{
head = new node();
}
virtual ~Queen();
void queenPut(const T&);
T queenGet();
bool queenEmpty();
bool queenFull();
void show();
void clear();
void setNode(const T&);
int getSize()const { return size;}
private:
int size;
int max;
node* head;
node* last;
};
template <class T>
void Queen<T>::clear()
{
node* p = head;
while(p->next!=NULL)
{
node* temp;
temp = p;
p = p->next;
--size;
delete temp;
}
}
template <class T>
Queen<T>::~Queen()
{
clear();
}
template <class T>
void Queen<T>::setNode(const T& data)
{
node* no = new node();
if(no!=NULL){
no->data = data;
no->next = last->next;
last->next = no;
last = last->next;
++size;
}
}
template <class T>
void Queen<T>::queenPut(const T& data)
{
if(queenFull())
{
throw "Queen is full !!";
}
node* no = new node();
if(last==NULL)
{
no->data = data;
no->next = head->next;
head->next = no;
last = head->next;
++size;
return ;
}
setNode(data);
}
template <class T>
T Queen<T>::queenGet()
{
if(queenEmpty())
{
throw "Queen is empty !!";
}
T data = head->next->data;
node* p = head->next->next;
delete head->next;
head->next = p;
--size;
return data;
}
template <class T>
void Queen<T>::show()
{
node* p = head->next;
cout<<"Queen< ";
while(p!=NULL)
{
cout<<p->data<<' ';
p = p->next;
}
cout<<" > ";
cout<<endl;
}
template <class T>
bool Queen<T>::queenEmpty()
{
return (head->next)==NULL;
}
template <class T>
bool Queen<T>::queenFull()
{
return size==max;
}