链队列

#include
#include
using namespace std;

template
struct Node
{
T item;
Node *next;
Node *prew;
};

template
class LQueue
{
private:
Node *head;
Node *rear;
int Count;
public:
LQueue();
~LQueue();
void enqueue(T item);//入队
void dequeue();//出队
int size(){ return Count; }//获取队列当前元素个数
bool isempty(){ return Count == 0 ? true : false; }//判断队列是否为空
T getHead();//获取队头的元素
};

template
LQueue::LQueue()
{
Count=0;
Node *anode=new Node;
anode->next=NULL;
anode->prew=NULL;
head=anode;
rear=anode;
}

template
LQueue::~LQueue()
{
for (int i = 0; i < Count; i++)
dequeue();
}

template
void LQueue::enqueue(T item)
{
if(Count==0)
{
rear->item=item;
Count++;
}
else
{
Node anode=new Node; //new申请的空间是在"堆"上的,堆上的空间,必须由程序员用delete释放,否则就会造成“内存泄露”。也就是说这部分内存一直被程序占有。
anode->item = item;
anode->next=rear;
rear->prew=anode;
rear=anode;
rear->prew=NULL;
Count++;
}
}

template
void LQueue::dequeue()
{
if(isempty())
{
cout<<“This LQueue is empty now”<<endl;
}
else
{
Node *p=head;
head=p->prew;
delete p;
Count–;
}
}

template
T LQueue::getHead()
{
return head->item;
}

//因为出站时是从head开始出站,所以对head后的每个Node,它的next的方向指向先出站的Node,prew的方向指向后出站的Node。

在理解时,这个队列的next和prew互换才符合正常思维。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值