zoukankan      html  css  js  c++  java
  • 队列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];
    }
    

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

  • 相关阅读:

    Elaxia的路线
    Sessions in BSU
    Mouse Hunt
    清北学堂 NOIP2017模拟赛 越赛越心塞
    BZOJ3571 HNOI2014 画框
    BZOJ4817 SDOI2017 相关分析
    BZOJ4009 HNOI2015 接水果
    CDQ分治与整体二分小结
    BZOJ3110 ZJOI2013 K大数查询
  • 原文地址:https://www.cnblogs.com/sdltf/p/12516649.html
Copyright © 2011-2022 走看看