码迷,mamicode.com
首页 > 其他好文 > 详细

队列2-循环队列

时间:2020-03-18 13:19:03      阅读:45      评论:0      收藏:0      [点我收藏+]

标签:empty   填充   void   pre   turn   第一个   功能   The   img   

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-循环队列

标签:empty   填充   void   pre   turn   第一个   功能   The   img   

原文地址:https://www.cnblogs.com/sdltf/p/12516649.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!