算法导论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;
}
相关文章推荐
- 算法导论10.1-6习题解答(用两个栈实现一个队列)
- 【算法导论】10.1-5单数组实现双端队列
- 循环队列的实现与分析,两种方法,算法导论10.1-4
- 算法导论10.1-6习题解答(用两个栈实现一个队列)
- 算法导论10.1-7习题解答(用两个队列实现一个栈)
- 算法导论第十章--队列的实现
- 【算法导论】C++参考源码之堆排序中的优先级队列
- 算法导论 第三部分——基本数据结构——栈、队列、链表、散列表
- 算法导论——lec 12 平摊分析与优先队列
- 算法导论之堆的应用---优先队列
- 【算法导论】链表队列
- 最大优先队列--【算法导论】
- 算法导论 顺序循环双向队列
- 关于 队列(C语言) ——(参考算法导论)