您的位置:首页 > 理论基础 > 数据结构算法

简单数据结构的实现之链队列

2011-09-19 16:18 417 查看
#include <iostream>

using namespace std;

#ifndef LINKQUEUE_H_INCLUDED
#define LINKQUEUE_H_INCLUDED

template <class ElemType>
struct QNode
{
ElemType data;
QNode* next;
};
template <class ElemType>
class LinkQueue
{
private:
QNode<ElemType>* front;
QNode<ElemType>* rear;
public:
LinkQueue();
~LinkQueue();
void ClearQueue();
bool QueueEmpty(){return front==rear;}
int QueueLength();
QNode<ElemType>* Front(){return front;}
QNode<ElemType>* Rear(){return rear;}
bool GetHead(ElemType& e);
bool EnQueue(ElemType e);
bool DeQueue(ElemType& e);
};
template <class ElemType>
LinkQueue<ElemType>::LinkQueue()
{
front=rear=new QNode<ElemType>;
front->next=NULL;
}
template <class ElemType>
LinkQueue<ElemType>::~LinkQueue()
{
while(front)
{
rear=front->next;
delete front;
front=rear;
}
}
template <class ElemType>
void LinkQueue<ElemType>::ClearQueue()
{
QNode<ElemType>* p=front->next;
while(p)
{
rear=p->next;
delete p;
p=rear;
}
rear=front;
front->next=NULL;
}
template <class ElemType>
int LinkQueue<ElemType>::QueueLength()
{
int i=0;
QNode<ElemType>* p=front->next;
while(p)
{
i++;
p=p->next;
}
return i;
}
template <class ElemType>
bool LinkQueue<ElemType>::GetHead(ElemType& e)
{
if(front==rear)
{
return false;
}
else
{
e=front->next->data;
return true;
}
}
template <class ElemType>
bool LinkQueue<ElemType>::EnQueue(ElemType e)
{
QNode<ElemType>* p=new QNode<ElemType>;
if(!p)
{
return false;
}
else
{
p->data=e;
rear->next=p;
rear=p;
p->next=NULL;
return true;
}
}
template <class ElemType>
bool LinkQueue<ElemType>::DeQueue(ElemType& e)
{
if(front==rear)
{
return false;
}
else
{
QNode<ElemType>* p=front->next;
e=p->data;
front->next=p->next;
if(rear==p)
{
rear=front;
}
delete p;
return true;
}
}
#endif // LINKQUEUE_H_INCLUDED
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐