队列

template<class Elem>
//用数组实现的队列
class AQueue:public Queue<Elem>

{
private:
int size;
int front;
int rear;
Elem *listArray;
public:
AQueue(int sz=DefaultListSize)
{
size=sz+1;
rear=0;front=1;
listArray=new Elem[size];
}
~AQueue()
{
delete [] listArray;
}
void clear()
{
front=rear;
}
bool enqueue(const Elem& it)
{
if(((rear+2)%size)==front) return false;
rear=(rear+1)%size;
listArray[rear]=it;
return true;
}
bool dequeue(Elem & it)
{
if(length()==0) return false;
it=listArray[front];
front=(front+1)%size;
return true;
}
bool frontValue(Elem & it) const
{
if(length()==0) return false;
it=listArray[front];
return true;
}
virtual int length() const
{
return ((rear+size)-front+1)%size;
}
};


#include "LList.h"
template<class Elem>
//用链表实现的队列
class LQueue:public Queue<Elem>

{
private:
Link<Elem> *front;
Link<Elem> *rear;
int size;
public:
LQueue(int sz=DefaultListSize)
{
front=NULL;rear=NULL;size=0;
}
~LQueue()
{
clear();
}
void clear()
{
while(front!=NULL)
{
rear=front;
front=front->next;
delete rear;
}
rear=NULL;
size=0;
}
bool enqueue(const Elem & it)
{
if(rear==NULL)
front =rear=new Link<Elem>(it,NULL);
else
{
rear->next=new Link<Elem>(it,NULL);
rear=rear->next;
}
size++;
return true;
}

bool dequeue(Elem &it)
{
if(size==0) return false;
it=front->element;
Link<Elem>* ltemp=front;
front=front->next;
delete ltemp;
if(front==NULL)
rear=NULL;
size--;
return true;
}

bool frontValue(Elem & it) const
{
if(size==0) return false;
it=front->element;
return true;
}
virtual int length() const
{
return size;
}
};
Live together,or Die alone!
原文地址:https://www.cnblogs.com/hzhida/p/2354745.html