您的位置:首页 > 其它

算法导论10.1队列

2015-02-11 17:04 344 查看




注意n个空间的队列,有最多n-1个元素









/*
*IA_10.1queue.h
*
*Createdon:Feb13,2015
*Author:sunyj
*/

#ifndefIA_10_1QUEUE_H_
#defineIA_10_1QUEUE_H_

#include<iostream>
#include<cstdint>

//ENQUEUE(Q,x)
//Q[Q.tail]=x
//ifQ.tail=Q.length
//Q.tail=1
//elseQ.tail=Q.tail+1

//DEQUEUE(Q)
//x=Q[Q.haed]
//ifQ.head==Q.length
//Q.head=1
//Q.head=Q.head+1
//returnx

template<classT>classqueue{
public:
queue(int64_tconstn):head(0),tail(0),length(n)
{
data=newT
();
}
boolfull()
{
if(head==tail+1||(0==head&&length==tail+1))
{
returntrue;
}
returnfalse;
}
boolempty(){returnhead==tail;}
voidprint()
{
if(empty())
{
return;
}
if(head<tail)
{
for(int64_ti=head;i<tail;i++)
{
std::cout<<data[i]<<"";
}
}
else
{
for(int64_ti=head;i<length;i++)
{
std::cout<<data[i]<<"";
}
for(int64_ti=0;i<tail;i++)
{
std::cout<<data[i]<<"";
}
}
std::cout<<std::endl;
return;
}
int64_tenqueue(Tconstx)
{
if(full())
{
std::cout<<"queueisfull,enqueuefailed"<<std::endl;
return-1;
}
data[tail]=x;
if(length==tail+1)
{
tail=0;
}
else
{
++tail;
}
return0;
}
int64_tdequeue(T&x)
{
if(empty())
{
return-1;
}
x=data[head];
if(length-1==head)
{
head=0;
}
else
{
++head;
}
return0;
}
voidclear()
{
while(!empty())
{
Tx;
dequeue(x);
}
}
private:
inthead;//pointstothefirstelementofthequeue,theelementhasalreadybeeninqueue
inttail;//pointstothenextcomingelement
T*data;
int64_tconstlength;//thequeuecanholdatmostlength-1element
};

#endif/*IA_10_1QUEUE_H_*/


/*
*IA_10.1queue.cpp
*
*Createdon:Feb11,2015
*Author:sunyj
*/
#include"IA_10.1queue.h"

intmain()
{
queue<int>q(4);
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);//afterenqueue3,thequeueisfull
q.enqueue(4);//enqueuefailed,becausethequeueisfull
q.print();
intx;
if(0==q.dequeue(x))
{
std::cout<<x<<std::endl;
}
if(0==q.dequeue(x))
{
std::cout<<x<<std::endl;
}
q.print();
q.enqueue(4);
q.enqueue(5);
q.enqueue(6);//enqueuefailed,becausethequeueisfull
q.print();//elements3,4,5
q.clear();
q.print();
return0;
}


















内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: