数据结构之循环队列

1、算法思想

  • 在队列的基础上做调整
  • front变量含义:front 指向队列的第一个元素(初为0),array【front】是队列的第一个元素
  • rear变量含义:rear 指向队列的最后一个元素的后一个位置。(初为0)。空出空间做约定
  • 队列满的条件是:(rear+1)%maxSize == front
  • 队列空的条件是:real==front
  • 队列中有效的数据的个数:(rear+maxSize - front )% maxSize

2、代码

package basicdata;

public class CirArrayQueueTest {
    public static void main(String[] args) {
        CyArrayQueue cyArrayQueue = new CyArrayQueue(16);
        cyArrayQueue.enQueue(5);
        cyArrayQueue.enQueue(1);
        cyArrayQueue.enQueue(5);
        cyArrayQueue.enQueue(6);
        cyArrayQueue.enQueue(8);

        System.out.println("打印整个队列");
        int num3 = cyArrayQueue.deQueue();
        System.out.println("出队数据:"+num3);

        cyArrayQueue.showQueue();
    }
}
    class CyArrayQueue {
        private int maxSize = 2; //循化队列数组的最大容量
        private int front = 0;   //front 指向队列的第一个元素
        private int rear = 0;    //rear 指向队列的最后一个元素的后一个位置。
        private int[] array; //存放数据,模拟循环队列



        //创建循环队列的构造器
        public CyArrayQueue(int arrayMaxSize) {
        maxSize = arrayMaxSize;
        array = new int[maxSize];
        }

        //判空
        public boolean isEmpty(){return front==rear ;}

        //判满
        public boolean isFull(){return (rear+1) % maxSize == front;}

        //入队
        public void enQueue(int value){
            if (isFull()) {
                System.out.println("队列已满,入队失败");
                return;
            }
            else {
                //rear 指向队列的最后一个元素的后一个位置。
                array[rear] = value; //添加数据`
                //指针后移
                rear = (rear+1)%maxSize;
            }
        }
        //出队
        public int deQueue() {
            if (isEmpty()) {
                throw new RuntimeException();

            } else {
                //1、front 指向队列的第一个元素
                //return array[front]; 只能放最后
                int temp = array[front];
                front = (front + 1) % maxSize;
                return temp;
            }
        }
        //求出当前队列有效数据个数
        public void showQueue(){
            if (isEmpty()) {
                System.out.println("队列为空,没有数据");
            }
            // 思路:从front 开始遍历
            // 遍历有效个元素
            else {
                for (int i = front; i <front+size() ; i++) {
                    System.out.printf("array[%d]=%d\t",i%maxSize,array[i%maxSize]);
                }
            }
        }
        //获取循环队列有效数据个数
        public int size(){
            return (rear-front+maxSize)%maxSize;
        }

    }




运行结果

```java
打印整个队列
出队数据:5
array[1]=1	array[2]=5	array[3]=6	array[4]=8	
Process finished with exit code 0




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值