队列2-循环队列
Part 1:循环队列
我们来看下上次我们写下的Queue
:
struct Queue{
int que[1000]; //最大容纳1000个元素
int head = 0; //队列的第一个元素
int tail = 0; //队列的最后一个元素
void push(int x){ que[tail++]=x; } //增加一个
void pop(){ head++; } //弹出第一个
bool empty(){ return tail-head; } //是否为空
int num(){ return tail-head; } //返回有多少个元素
int getHead(){ return que[head]; } //获取第一个元素
};
现在我们增加一个功能,获取第i个元素。
int getNum(int x){
}
好的,开始在里边填充东西:
int getNum(int x){
return que[x];
}
但显然,如果你的x
比较大的话,你会输出什么?
那就想个办法,我们可以给他来个循环队列,也就是说,如果你的x
太大了,我们就把他重新归到head
,再来确定元素,就像这样:
那就开始吧!
int getNum(int x){
return que[x%(head-tall)];
}
但是,如果这个队列是空的话,head-tail
是0的话,会有error
,我们再加一个特判:
int getNum(int x){
return !(head-tall)?-1:que[x%(head-tall)];
}
如果队列为空,返回一个-1
。顺便咱把getHead()
也重写一下:
int getHead(){
return !(head-tall)?-1:que[head];
}
好的,循环队列就实现啦~