zoukankan      html  css  js  c++  java
  • 数据结构之循环队列Demo

    循环队列


     

    比较简单,循环队列主要是判断队满、队空、有效元素个数

    画图说明:


    假设:队的长度为5(0-4)

    但是实际maxsize为6,需要一个预留空间(不存储元素)做计算



     继续添加3个元素后:

     



     出队一个元素



    下面是完整循环队列代码demo:

    public class CircleArrayQueueDemo {
        private int maxSize;
        private int front;
        private int rear;
        private int[] arr;
    
        public static void main(String[] args) {
            CircleArrayQueueDemo caq = new CircleArrayQueueDemo(4);
            caq.addQueue(10);
            caq.addQueue(20);
            caq.addQueue(30);
            caq.addQueue(40);
            System.out.println("加入10,20,30,40");
            caq.showQueue();
            System.out.println("出队,此时队里还剩下:");
            caq.getQueue();
            caq.showQueue();
            System.out.println("出队,此时队里还剩下:");
            caq.getQueue();
            caq.showQueue();
            System.out.println("出队,此时队里还剩下:");
            caq.getQueue();
            caq.showQueue();
            System.out.println("加入10,20,30,40");
            caq.addQueue(10);
            caq.addQueue(20);
            caq.addQueue(30);
            caq.addQueue(40);
            caq.showQueue();
        }
    
        public CircleArrayQueueDemo(int maxSize) {
            this.maxSize = maxSize+1;
            arr = new int[maxSize+1];
        }
    
        public boolean isFull() {
            return (rear + 1) % maxSize == front;//队满条件
        }
    
        public boolean isEmpty() {
            return rear == front;//队空条件
        }
    
        public void addQueue(int data) {
            if (isFull()) {
                System.out.println("队已满,不能加入");
                return;
            }
            arr[rear] = data;
            rear = (rear + 1) % maxSize;//取模运算防止越界,以及循环作用
        }
    
        public int getQueue() {
            if (isEmpty()) {
                throw new RuntimeException("队为空,不能取数据");
            }
            int tmp = arr[front];
            front = (front+1) % maxSize;//取模运算防止越界,以及循环作用
            return tmp;
        }
    
        public void showQueue() {
            if (isEmpty()) {
                System.out.println("队为空");
            }
         //从队首遍历,假设队头在index为1的位置,(size+front)-front=size,总数不变
    for (int i = front; i < front + size(); i++) {
           //取模防止越界与起循环作用 System.out.printf("arr[%d]=%d ", i % maxSize, arr[i % maxSize]); } } public int size() { return (rear + maxSize - front) % maxSize;//有效元素的数量 } }
  • 相关阅读:
    关于application/x-www-form-urlencoded编码
    socket 状态
    TCP/IP三次握手详解
    一步步优化JVM四:决定Java堆的大小以及内存占用
    编码问题
    git 应用
    父与子继承
    python try except
    python 编码问题
    requests 库使用方法
  • 原文地址:https://www.cnblogs.com/taichiman/p/12723661.html
Copyright © 2011-2022 走看看