队列2-循环队列

Posted sdltf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了队列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];
}

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

以上是关于队列2-循环队列的主要内容,如果未能解决你的问题,请参考以下文章

循环队列

第三节2:Java集合框架之队列Queue

5分钟教你如何设计一个循环队列

[数据结构] 队列与循环队列

新手向C语言实现特殊数据结构——队列(含用两个队列实现栈)

新手向C语言实现特殊数据结构——队列(含用两个队列实现栈)