Java实现 数组实现循环队列

来源:互联网 发布:淘宝优惠助手 编辑:程序博客网 时间:2024/05/23 21:01
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++]);        }    }}
0 0