抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Part 1:循环队列

我们来看下上次我们写下的Queue

1
2
3
4
5
6
7
8
9
10
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个元素。

1
2
int getNum(int x){
}

好的,开始在里边填充东西:

1
2
3
int getNum(int x){
return que[x];
}

但显然,如果你的x比较大的话,你会输出什么?

那就想个办法,我们可以给他来个循环队列,也就是说,如果你的x太大了,我们就把他重新归到head,再来确定元素,就像这样:

那就开始吧!

1
2
3
int getNum(int x){
return que[x%(head-tall)];
}

但是,如果这个队列是空的话,head-tail是0的话,会有error,我们再加一个特判:

1
2
3
int getNum(int x){
return !(head-tall)?-1:que[x%(head-tall)];
}

如果队列为空,返回一个-1。顺便咱把getHead()也重写一下:

1
2
3
int getHead(){
return !(head-tall)?-1:que[head];
}

好的,循环队列就实现啦~

评论