Java实现 数组实现循环队列

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值