• 数组模拟循环队列(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];
        }
    
    }
  • 相关阅读:
    【C语言】中的版本规范(C89 C99等)
    【微机】计算机系统组成
    【微机】验证负数以补码存储程序 C语言
    katalon studio升级到6.3.3版本后如何生成测试报告
    使用Katalon Studio进行数据驱动测试的方法(转)
    katalon 参数化
    Katalon中的测试对象、用例和套件的命名规范
    转载kalaton故障处理
    Katalon Studio IE浏览器 不好用 无法录制
    Katalon Studio操作界面详细说明(转载)
  • 原文地址:https://www.cnblogs.com/GEMyd/p/11647253.html
Copyright © 2020-2023  润新知