来源:程序员小灰

数组长度空间固定;

循环队列;

数组中:(下标+1)除以数组长度得到的是下一个元素的下标,形成循环的现象。如:

rear =(rear+1)%array.length;//队尾下标后移

front =(front+1)%array.length;//队头下标后移

i=(i+1)%array.length;//i的下标后移

package chapter2.part3;

/**
 * Created by weimengshu on 2018/8/24.
 */
public class MyQueue {

    private int[] array;
    private int front;
    private int rear;

    public MyQueue(int capacity){
        this.array = new int[capacity];
    }

    /**
     * 入队
     * @param element  入队的元素
     */
    public void enQueue(int element) throws Exception {
        if((rear+1)%array.length == front){
            throw new Exception("队列已满!");
        }
        array[rear] = element;
        rear =(rear+1)%array.length;//余数即下标
    }

    /**
     * 出队
     */
    public int deQueue() throws Exception {
        if(rear == front){
            throw new Exception("队列已空!");
        }
        int deQueueElement = array[front];
        front =(front+1)%array.length;//余数即下标
        return deQueueElement;
    }

    /**
     * 输出队列
     */
    public void output(){
        for(int i=front; i!=rear; i=(i+1)%array.length){//余数即下标
            System.out.println(array[i]);
        }
    }

    public static void main(String[] args) throws Exception {
        MyQueue myQueue = new MyQueue(6);
        myQueue.enQueue(3);
        myQueue.enQueue(5);
        myQueue.enQueue(6);
        myQueue.enQueue(8);
        myQueue.enQueue(1);
        myQueue.deQueue();
        myQueue.deQueue();
        myQueue.deQueue();
        myQueue.enQueue(2);
        myQueue.enQueue(4);
        myQueue.enQueue(9);
        myQueue.output();
    }
}

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐