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];
    }
    

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

  • 相关阅读:
    2、编程语言与python简介
    1、计算机基础
    查询操作
    查看电脑秘钥方法
    C/C++掌握技能(三)
    Ubuntu 16.04虚拟机调整窗口大小自适应Windows 7
    Java正则表达式初学者使用法简介
    Java-String类型的参数传递问题
    Java中goto和break、continue实现区别
    C/C++掌握技能(三)
  • 原文地址:https://www.cnblogs.com/sdltf/p/12516649.html
Copyright © 2011-2022 走看看