java数组实现循环队列示例介绍

 更新时间:2022年01月10日 09:54:41   作者:小辉小辉-  
大家好,本篇文章主要讲的是java数组实现循环队列示例介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览

 从顶部进去数据,从底部出来数据,用数组实现队列,但是下面这个队列,只能进行一次存数值,取数值,不够完善。

import java.util.Scanner;
 
public class ArrayQueueDemo {
    public static  void main(String[]args){
        //定义队列大小maxsize
        ArrayQueue arrayQueue=new ArrayQueue(3);
        Scanner scanner=new Scanner(System.in);
        char key=' ';
        boolean  leap=true;
        while(leap){
            System.out.println("s(show):显示队列");
            System.out.println("e(exit):退出程序");
            System.out.println("h(head):显示头条数据");
            System.out.println("a(add):添加数据");
            System.out.println("g(get):从程序中取出队列");
            System.out.println("请输入一个数");
 
            key= scanner.next().charAt(0);
            switch (key){
                case 's':
                    arrayQueue.showQueue();
                    break;
 
                case 'h':
                    System.out.printf("头数据为%d",arrayQueue.showHead());
                    break;
                case 'a':
                    System.out.println("输入添加数据");
                   int data= scanner.nextInt();
                    arrayQueue.addQueue(data);
                    break;
                case 'g':
                   arrayQueue.getQueue();
                    break;
                case 'e':
                    leap=false;
                     break;
                default:
                    break;
 
 
            }
        }
 
    }
 
}
class ArrayQueue{
    private  int maxsize;//队列大小
    private int rear;
    private int front;
    private int [] arry;
    public ArrayQueue(int maxsize1){
        maxsize=maxsize1;
        arry=new int[maxsize];
        front =-1;
        rear=-1;
    }
    //判断队列是否满
    public boolean isFull(){
        return rear==maxsize-1;
    }
    //增加数据
    public  void addQueue(int data){
        if (isFull()){
            System.out.println("队列满了");
        }
        else{
            arry[rear+1]=data;
            rear++;
 
 
        }
    }
    //显示数据
    public  void showQueue(){
        for (int i = 0; i < arry.length; i++) {
            System.out.println();
            System.out.printf("%d",arry[i]);
 
        }
    }
    //是否空
    public boolean isEmpety(){
        return rear== front;
    }
    //显示头数据
    public int showHead() {
        if (isEmpety()) {
 
            throw new RuntimeException("队列是空的");
        }
        return arry[front +1];
 
    }
    public int getQueue(){
        if (isEmpety()){
            throw new RuntimeException("队列是空");
 
        }
        System.out.printf("去除一个队列为%d",arry[++front]);
        arry[front]=0;
 
        return 0;
 
    }
 
 
 
 
}

 循环队列,可以进行数据插入和取出,是上个普通队列的增强版。上个队列只能使用一次的情况被解决了

import java.util.Scanner;
 
public class CircleArrayQueueDemo {
    public  static void main(String[] args){
        //定义队列大小maxsize
        cirCleArray cirCleArray=new cirCleArray(3);//队列大小是三,但是有效数据是两个
        Scanner scanner=new Scanner(System.in);
        char key=' ';
        boolean  leap=true;
        while(leap){
            System.out.println("s(show):显示队列");
            System.out.println("e(exit):退出程序");
            System.out.println("h(head):显示头条数据");
            System.out.println("a(add):添加数据");
            System.out.println("g(get):从程序中取出队列");
            System.out.println("请输入一个数");
 
            key= scanner.next().charAt(0);
            switch (key){
                case 's':
                    cirCleArray.showCircleArray();
                    break;
 
                case 'h':
                    System.out.printf("头数据为%d",cirCleArray.showHead());
                    break;
                case 'a':
 
                   cirCleArray.addQueue();
                    break;
                case 'g':
                    cirCleArray.getQueue();
                    break;
                case 'e':
                    leap=false;
                    break;
                default:
                    break;
 
 
            }
 
 
    }
 
    }
}
    class cirCleArray{
        private int maxsize;
        private int front;
        private int rear;
        private int [] arry;
        Scanner scanner=new Scanner(System.in);
        public cirCleArray(int maxsize1){
            this.maxsize=maxsize1;
          arry=new int[maxsize];
            front=0;
            rear=0;
        }
        //显示队列
        public void showCircleArray(){
            if (isEmpty()){
                System.out.println("队列为空");
            }
            else{
                for (int i =front; i < front+size(); i++) {
                    System.out.printf("arry[%d]=%d\n",i % maxsize,arry[i % maxsize]);
                }
            }
 
        }
        public  int size(){
            return (rear+maxsize-front)%maxsize;
        }
        //队列为空
        public boolean isEmpty(){
            return front==rear;
        }
        //队列为满
        public boolean isFull(){
            return (rear+1)%maxsize==front;
        }
        //添加数据
        public void addQueue(){
 
           if (isFull()){
               System.out.printf("队列满了");
           }
           else{
               System.out.printf("输入添加的数据");
               int  data=scanner.nextInt();
               arry[rear]=data;
             if (rear<maxsize-1){
                 rear++;
             }
             else {
                 rear=(rear+1)%maxsize;
             }
 
           }
 
 
        }
        //取出数据
        public void getQueue(){
            if (isEmpty()){
                System.out.println("队列是空的");
            }
            else{
                System.out.printf("取出数据%d",arry[front]);
//               arry[front]=0;
//                front++;
                front=(front+1)%maxsize;
 
            }
        }
        //显示头数据
        public int showHead() {
            if (isEmpty()) {
 
                throw new RuntimeException("队列是空的");
            }
            return arry[front];
 
        }
    }

到此这篇关于java数组实现循环队列示例介绍的文章就介绍到这了,更多相关java数组循环队列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot中如何使用Convert接口实现类型转换器

    Spring Boot中如何使用Convert接口实现类型转换器

    这篇文章主要介绍了Spring Boot中使用Convert接口实现类型转换器的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java中Cglib代理和JDK代理的区别详解

    Java中Cglib代理和JDK代理的区别详解

    这篇文章主要介绍了Java中Cglib代理和JDK代理的区别详解,Cglib代理功能更强,无论目标类是否实现了接口都可以代理,他是基于继承的方式来代理目标类,如果目标类也实现了接口,代理类也会实现一次,需要的朋友可以参考下
    2023-09-09
  • MyBatis-plus使用lambda条件构造器报错问题及解决

    MyBatis-plus使用lambda条件构造器报错问题及解决

    这篇文章主要介绍了MyBatis-plus使用lambda条件构造器报错问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 详解springboot-mysql-pagehelper分页插件集成

    详解springboot-mysql-pagehelper分页插件集成

    这篇文章主要介绍了springboot-mysql-pagehelper分页插件集成,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • Java使用JDK与Cglib动态代理技术统一管理日志记录

    Java使用JDK与Cglib动态代理技术统一管理日志记录

    这篇文章主要介绍了Java使用JDK与Cglib动态代理技术统一管理日志记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • 详解Java中布隆过滤器(Bloom Filter)原理及其使用场景

    详解Java中布隆过滤器(Bloom Filter)原理及其使用场景

    布隆过滤器是1970年由布隆提出的,它实际上是一个很长的二进制向量和一系列随机映射函数,它的作用是检索一个元素是否存在我们的集合之中,本文给大家详细的讲解一下布隆过滤器,感兴趣的同学可以参考阅读
    2023-05-05
  • Java利用SpEL表达式实现权限校验

    Java利用SpEL表达式实现权限校验

    这篇文章主要为大家详细介绍了Java如何利用SpEL表达式实现权限校验功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • Java设计模式之命令模式

    Java设计模式之命令模式

    这篇文章介绍了Java设计模式之命令模式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • 关于EntityWrapper的in用法

    关于EntityWrapper的in用法

    这篇文章主要介绍了关于EntityWrapper的in用法详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Servlet实现简单的用户登录功能实例代码

    Servlet实现简单的用户登录功能实例代码

    这篇文章主要给大家介绍了关于利用Servlet实现简单的用户登录功能的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12

最新评论