zoukankan      html  css  js  c++  java
  • 数组模拟循环队列(java实现)

    1.front变量的含义:front就指向队列的第一个元素,也就是说arr[front]就是队列的第一个元素front的初始值=0。

    
    

    2.rear变量的含义:rear指向队列的最后一个元素的后一个位置.因为希望空出一个空间做为预留空间。 rear的初始值=0。

    
    

    3.当队列满时,条件是(rear +1)%maxsize=front【满】。

    
    

    4.对队列为空的条件,rear==front空。

    
    

    5.当我们这样分析,队列中有效的数据的个数(rear+ maxsize-front)%maxsize

     
    public class CircleArrayQueue {
        public static void main(String[] args) {
            System.out.println("测试数组模拟环形队列");
            circlearrqueue aq=new circlearrqueue(3);
            char key=' ';//接收用户输入
            Scanner scanner =new Scanner(System.in);
            boolean loop=true;
            //输出有个菜单
            while(loop){
                System.out.println("s(show):显示队列");
                System.out.println("e(exit):退出程序");
                System.out.println("a(add):添加数据到队列");
                System.out.println("h(ehead):查看队列头的数据 ");
                System.out.println("g(get):取出队列头的数据 ");
                key=scanner.next().charAt(0);//接受一个字符
                switch (key){
                    case 's':
                        aq.showQueue();
                        break;
                    case 'a':
                        System.out.println("输出一个数");
                        int value=scanner.nextInt();
                        aq.addQueue(value);
                        break;
                    case 'g':
                        try{
                            int res=aq.getQueue();
                            System.out.printf("取出的数据是%d
    ",res);
                        }catch (Exception e){
                            System.out.println(e.getMessage());
                        }
                        break;
                    case 'h'://查看队列头的数据
                        try{
                            int res =aq.headQueue();
                            System.out.printf("队列头的数据是%d
    ",res);
                        }catch (Exception e){
                            System.out.println(e.getMessage());
                        }
                        break;
                    case 'e'://退出
                        scanner.close();
                        loop=false;
                        break;
                    default:
                        break;
                }
            }
            System.out.println("程序退出");
        }
    }
    
    class circlearrqueue{
        private int maxsize;//表示队列的长度
        private int front;//队列头
        private int rear;//队列尾
        private int[] arr;//该数组用于存放数据
        public circlearrqueue(int arrMaxSize){
            maxsize = arrMaxSize;
            arr = new int[maxsize];
        }
        public boolean isFull(){
            return (rear+1)%maxsize==front;
        }
        public boolean isEmpty(){
            return rear==front;
        }
        public void addQueue(int n){
            //判断队列是否为满
            if(isFull()){
                System.out.println("队列满 ,不能加入");
                return;
            }
            arr[rear]=n;//直接将数据添加
            rear=(rear+1)%maxsize;
        }
    
        public int getQueue(){
            //判断队列是否为空
            if(isEmpty()){
                //通过抛出异常
                throw new RuntimeException("队列空,不能取数据");
            }
            //这里需要分析front是指向队列的第一个元素
            //1.先把front的值保留到临时变量 2.将front后移 3.将临时变量的值返回
            int value=arr[front];
            front=(front+1)%maxsize;
            return value;
        }
        public void showQueue(){
            //遍历
            if(isEmpty()){
                System.out.println("队列为空,没有数据");
                return;
            }
            //从front开始遍历,遍历多少个元素?
            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;
        }
        public int headQueue(){
            //判断
            if(isEmpty()){
                throw new RuntimeException("队列为空,没有数据");
            }
            return arr[front];
        }
    
    }
  • 相关阅读:
    前端的一些雕虫小技,从100%和滚动条说起
    这事没完,继续聊spring cloud stream和kafka的这些小事
    简单聊一聊spring cloud stream和kafka的那点事
    是谁,在敲打我窗-CSS雨滴动画效果
    对照谈-官方spring-boot-starter和自定义starter异同分析
    从spring boot发邮件聊到开发的友好性
    抖音抖一抖-SVG和CSS视觉故障艺术小赏
    上位机组态控件PCHMI-PLC地址命名规则
    【C#格式化字符】【C#Chart图表控件】【饼图、柱形图、波形图】
    【PCHMI.DLL】【C#上位机二次开发文档】2021年7月15更新
  • 原文地址:https://www.cnblogs.com/GEMyd/p/11647253.html
Copyright © 2011-2022 走看看