• 1、java数据结构和算法---循环队列


    直接上代码:

    public class CircleArrayQueueLvcai {
    private int[] array;
    private int maxSize;//循环队列大小
    private int front; // 队列头, 这里约定初始值为0,
    private int rear ; //队列尾,初始值为0, 这里约定为 队列中最后一位元素的下一个位置(这样约定,意味着该队列的存储容量为 maxSize-1)
    
    //构造
    public CircleArrayQueueLvcai(int size){
        maxSize = size;
        array = new int[size];
    }
    //是否满
    public boolean isFull(){
        return (rear+1) % maxSize == front;  //rear+1 = maxSize 此时对maxSize取模式 结果为0
    }
    //是否空
    public boolean isEmpty(){
        return rear == front; //队列尾 = 队列头 = 0 就为空
    }
    
    //添加数据
    public String add(int num) throws Exception {
        //判断是否满
        if(isFull()){
            throw new Exception("circle Queue is full, you can set num is "+(maxSize-1));
        }
    
        array[rear] = num;
        //rear++; 这样写不对,, 因为是循环队列,,队列添加满后,,rear自动变为0, 重新开始
        rear = (rear+1) % maxSize;
        return "add success";
    }
    
    //出队列
    public int push() throws Exception {
        //判断是否为空
        if(isEmpty()){
            throw new Exception("circle array is empty");
        }
        int resultNum = array[front];
        //不能这样写 front++;  循环队列, 要让front 队列头加满后, 自动变为0
        front = (front+1) % maxSize;
        return resultNum;
    }
    
    //show circle queue
    public void show(){
        //是否为空
        if(isEmpty()){
            System.out.println(" circle queue is empty");
        }
        //从front开始遍历到 有效数据
        for(int i=front; i<front+getAliveNum(); i++){
            System.out.print(array[i]+" ");
        }
        System.out.println();
    }
    //获取 循环队列有效数据
    public int getAliveNum(){
        //获取队列的有效数据: (rear+maxSize-front)%maxSize , 当rear为最后一个元素的下一个位置时,这个公式是成立的
        return (rear+maxSize-front)%maxSize;
    }
    
    
    
    
    public static void main(String[] args) throws Exception {
        //创建循环队列, 容量为4
        CircleArrayQueueLvcai circle = new CircleArrayQueueLvcai(5);
        circle.add(1);
        circle.add(2);
        circle.add(3);
        circle.add(4);
        circle.add(4);//这样的循环队列 能存的元素的大小为 size-1
        circle.show();
        //出队列
        //circle.push();
        //circle.push();
        //circle.push();
        //circle.show();
    }
    

    }
    测试结果:

      public static void main(String[] args) throws Exception {
        //创建循环队列, 容量为4
        CircleArrayQueueLvcai circle = new CircleArrayQueueLvcai(5);
        circle.add(1);
        circle.add(2);
        circle.add(3);
        circle.add(4);
        //circle.add(4);//这样的循环队列 能存的元素的大小为 size-1
        circle.show();
        //出队列
        circle.push();
        //circle.push();
        //circle.push();
        circle.show();
    }
    

    结果为:

      public static void main(String[] args) throws Exception {
        //创建循环队列, 容量为4
        CircleArrayQueueLvcai circle = new CircleArrayQueueLvcai(5);
        circle.add(1);
        circle.add(2);
        circle.add(3);
        circle.add(4);
        //circle.add(4);//这样的循环队列 能存的元素的大小为 size-1
        circle.show();
        //出队列
        circle.push();
        circle.push();
        //circle.push();
        circle.show();
    }
    

    结果为:

  • 相关阅读:
    Flask--Config研究
    Python和Mongodb
    使用 wsgiref 创建WSGI APP
    如何使用werkzeug创建WSGI APP
    编程常用数据结构与函数总结(vector、list、stack、deque、字符串)
    LeetCode 841 钥匙和房间(怎么减少程序运行时间、BFS、lambda、sync_with_stdio、cin.tie)
    卡尔曼滤波总结
    ROS之rviz显示历史运动轨迹、路径的各种方法(visualization_msgs/Marker、nav_msgs/Path)
    二叉树前序遍历、中序遍历、后序遍历、层序遍历的直观理解
    MathType常用快捷键
  • 原文地址:https://www.cnblogs.com/lvcai/p/12986010.html
Copyright © 2020-2023  润新知