循环队列注意点及实现

队尾插入元素(rear),队头元素出队(front)
1.循环队列内元素个数等于数组或者链表元素长度减一时,即可认为循环链表已经装满,否则队列满和队列为空的判断条件相同
即 (arr.length - 1 == size) => 队列满 ,或者 (list.getLength() - 1 == size) => 队列满
2.队满判断条件:
(rear+1)%arr.length == front
3.队列为空的判断条件:
rear == front
4.元素出队和元素入队之后索引的变化都是(指针+1)%arr.length
(队头)元素出队:front = (front+1)%arr.length
(队尾)元素入队:rear = (rear+1)%arr.length

public class Circular_queue {
    private int[] arr;//采用数组实现循环队列
    private int front;//队头指针
    private int rear;//队尾指针

    public Circular_queue() {
    }

    /**
     * @param length 队列空间大小
     */    
    public Circular_queue(int length){
        arr = new int[length];
    }

    //插入元素
    public void insert(int value) throws Exception {
        //队列满了
        if((rear+1)%arr.length==front){
            throw new Exception("队列满了。。。");
        }
        arr[rear] = value;
        rear = (rear+1)%arr.length;
    }

    //元素出队
    public int pop() throws Exception {
        if(rear==front){
            throw new Exception("队列内为空。。");
        }
        int result = arr[front];
        front = (front+1)%arr.length;
        return result;
    }

    //展示所有元素
    public void showAll() throws Exception {
        int _rear = rear;
        int _front = front;
        System.out.println("开始打印数据~~~~~~");
        while (_rear!=_front){
            System.out.println(arr[_front]);
            _front = (_front+1)%arr.length;
        }
        System.out.println("数据打印完毕~~~~~~");
    }
}
全部评论

相关推荐

沉淀一会:**圣经 1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务