zoukankan      html  css  js  c++  java
  • 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();
    }
    

    结果为:

  • 相关阅读:
    UVALive 7141 BombX
    CodeForces 722D Generating Sets
    CodeForces 722C Destroying Array
    CodeForces 721D Maxim and Array
    CodeForces 721C Journey
    CodeForces 415D Mashmokh and ACM
    CodeForces 718C Sasha and Array
    CodeForces 635C XOR Equation
    CodeForces 631D Messenger
    田忌赛马问题
  • 原文地址:https://www.cnblogs.com/lvcai/p/12986010.html
Copyright © 2011-2022 走看看