template<typename DataType>
class LinkQueue{
public:
LinkQueue();
~LinkQueue();
void EnQueue(DataType x);
DataType DeQueue();
DataType GetHead();
int Empty();
private:
Node<DataType> *front, *rear;
};
构造函数
template<typename DataType>
LinkQueue<DataType>::LinkQueue(){
Node<DataType>*s=nullptr;
s=new Node<DataType>;
s->next=nullptr;
front=rear=s;
}
析构函数
template<typename DataType>
LinkQueue<DataType>::~LinkQueue(){
Node<DataType> *p=nullptr;
while(front!=rear){
p=front->next;
front->next=p->next;
delete p;
}
delete front;
}
入队操作
template<typename DataType>
void LinkQueue<DataType>::EnQueue(DataType x){
Node<DataType>*s=nullptr;
s=new Node<DataType>;
s->data=x;
s->next=nullptr;
rear->next = s;
rear = s;
}
出队操作
template<DataType>
DataType LinkQueue<DataType>::DeQueue(){
DataType x;
Node<DataType> *p=nullptr;
if(rear == front) throw"下溢";
p = front->next;
x = p->data;
if(p->next == nullptr) rear=front;
delete p;
return x;
}
完整代码
template<typename DataType>
struct Node{
DataType data;
Node<DataType> *next;
};
template<typename DataType>
class LinkQueue{
public:
LinkQueue();
~LinkQueue();
void EnQueue(DataType x);
DataType DeQueue();
DataType GetHead();
int Empty();
private:
Node<DataType> *front, *rear;
};
template<typename DataType>
LinkQueue<DataType>::LinkQueue(){
Node<DataType> *s=new Node<DataType>;
s->next = nullptr;
front=rear=s;
}
template<typename DataType>
LinkQueue<DataType>::~LinkQueue(){
Node<DataType> *p=nullptr;
while(front!=rear){
p=front->next;
front->next=p->next;
delete p;
}
delete front;
}
template<typename DataType>
void LinkQueue<DataType>::EnQueue(DataType x){
Node<DataType> *s=new Node<DataType>;
s->next=nullptr;
s->data=x;
rear->next=s;
rear=s;
}
template<typename DataType>
DataType LinkQueue<DataType>::DeQueue(){
DataType x;
Node<DataType> *p=nullptr;
if(rear == front) throw"下溢";
p=front->next;
x=p->data;
if(p->next == nullptr) rear=front;
delete p;
return x;
}
template<typename DataType>
DataType LinkQueue<DataType>::GetHead(){
return front->next->data;
}
template<typename DataType>
int LinkQueue<DataType>::Empty(){
return rear==front?1:0;
}