Java实现 数组实现循环队列

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010369338/article/details/71750989
public class CQueue {
    /**
     * 1、循环队列需要将 strings[size - 1] 与 strings[0] 连接起来。
     * 2、队首 前 需要空出一个位置作为标识位,所以队首队尾初始值为1,统一对待,以免其他操作发生混乱
     * 3、入队操作队尾,出队操作队首,互不相干
     */
    public int size = 11;
    public String[] strings;

    public int rear = 1,front = 1;


    public CQueue(int size) {
        this.size = size + 1;
        strings = new String[size];

    }
    public CQueue() {
        strings = new String[size];
    }

    /**
     * 判断队列空间是否已满
     * @return
     */
    public boolean isFull() {
        /**
         * 队尾 + 1 预留位置 = size; 此时队尾指针已经转了一圈
         * 所以 (队尾 + 1) % size == front;
         */
        if((rear + 1) % size == front) {
            return true;
        }
        return false;
    }

    /**
     * 是否为空队列
     * @return
     */
    public boolean isEmpty() {
        return rear == front;
    }

    public void inQueue(String name) {
        if(isFull()) {
            System.out.println("队列已满");
        }else {
            /**
             * 用于循环队列的首尾衔接
             * 当rear == 12 时 front == 2  0,1位置空余,0为标志位,所以该新增在1位置
             */
            rear = rear % size;
            /**
             * 记录下数据,并将队尾+1
             */
            strings[rear++] = name;
        }
    }

    public String outQueue() {
        String r = null;
        if(!isEmpty()) {
            front = front % size;
            r = strings[front++];
            return r;
        }
        return r;
    }

    public void display() {
        int f = front;
        int r = rear;

        while (r != f) {
            f = f % size;
            System.out.println(strings[f++]);
        }

    }

}

猜你喜欢

转载自blog.csdn.net/u010369338/article/details/71750989