链队列基本操作的C++实现
{
if(!Empty())
{
Node<ElemType>* tmpPtr = front->next;
e = tmpPtr->data;
return SUCCESS;
}
else
return UNDER_FLOW;
}
template <class ElemType>
StatusCode QueueLink<ElemType>::EnQueue(const ElemType &e)
{
return rear == front;
}
template <class ElemType>
void QueueLink<ElemType>::Clear()
{
ElemType tmpElem;
while(Lengh() > 0)
{
OutQueue(tmpElem);
}
}
template <class ElemType>
{
Init();
for(Node<ElemType> *tmpPtr = copy.front ->next;tmpPtr != NULL;tmpPtr = tmpPtr->next;)
InQueue(tmpPtr->data);
}
template <class ElemType>
QueueLink<ElemType>& QueueLink<ElemType>::operator=(const QueueLink<ElemType> ©)
#include <iostream>
using namespace std;
template <class ElemType>
class QueueLink
{
protected:
Node<ElemType> *front,*rear;
void Init();
public:
LinkQueue(); //无参数的构造函数
}
}
template <class ElemType>
StatusCode QueueLink<ElemType>::OutQueue(ElemType &e)
{
if(!Empty())
{
Node<ElemType> *tmpPtr = front->next;
e = tmpPtr->data;
front ->next = tmpPtr ->next;
StatusCode GetHead(ElemType &e) const; //取队头操作
StatusCode EnQueue(const ElemType &e); //入队操作
LinkQueue(const LinkQueue<ElemType> ©); //复制构造函数
LinkQueue<ElemType>&operator = (const LinkQueue<ElemType> ©); //赋值运算符重载
}
template <class ElemType>
void QueueLink<ElemType>::Init()
{
rear = front = new Node<ElemType>;
}
template <class ElemType>
QueueLink<ElemType>::LinkQueue()
void QueueLink<ElemType>::Traverse(void(*Visit)(ElemType &))
{
for(Node<ElemType> *tmpPtr = front->next;tmpPtr != NULL;tmpPtr = tmpPtr->next)
{
(*Visit)(tmpPtr->data);
{
Init();
}
template <class ElemType>
QueueLink<ElemType>::~LinkQueue()
{
Clear();
}
template <class ElemType>
int QueueLink<ElemType>::Length()const
{
int count = 0;
{
if(© != this)
{
Clear();
for(Node<ElemType> *tmpPtr = copy.front ->next;tmpPtr != NULL;tmpPtr = tmpPtr->next;)
{
InQueue(tmpPtr->data);
}
}
return *this;
{
Node<ElemType> *tmpPtr = new Node<ElemType>(e);
rear->next = tmpPtr;
rear = tmpPtr;
return SUCCESS;
}
template <class ElemType>
QueueLink<ElemType>& QueueLink<ElemType>::LinkQueue(const QueueLink<ElemType> ©)
virtual ~LinkQueue();
int Length() const; //求队列长度
bool QueueEmpty() const;
void Clear();
void Traverse(void(*Visit)(ElemType &)); //遍历队列
StatusCode OutQueue(ElemType &e); //出队操作
}
for(Node<ElemType> *tmpPtr = front->next;tmpPtr != NULL;tmpPtr = tmpPtr->next)
count++;
return count;
}
template <class ElemType>
bool QueueLink<ElemType>::QueueEmpty() const
if(rear == tmpPtr)
rear == front;
delete tmpPtr;
return SUCCESS;
}
else
return UNDER_Fss ElemType>
StatusCode QueueLink<ElemType>::GetHead(ElemType &e) const