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数组循环队列内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java mybatis如何操作postgresql array数组类型

    目录 我定义了几个基础数据类型的数组 java mybatis操作 postgresql array数组类型备忘 找了半天没有找到postgresql中关于array数组类型的字段如何对应到java中的数据类型,后来找到了mybatis的TypeHandler,只要实现一个自定义的TypeHandler就行了,如下, 我定义了几个基础数据类型的数组 public class ArrayTypeHandler extends BaseTypeHandler<Object[]> { private

  • Java多维数组详解

    目录 0.前言及思维导图 0.1 怎么理解多维数组? 0.2 思维导图: 1.多维数组的动态初始化 1.1 语法格式 1.2 以例助解 2.多维数组的引用 2.1引用方式 3.补充:获取数组长度 总结 0.前言及思维导图 0.1 怎么理解多维数组? 多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组. 0.2 思维导图: 1.多维数组的动态初始化 ★以二维数组为例 1.1 语法格式 直接为每一维分配空间,格式如下: type[][] typeName

  • 带你了解Java数据结构和算法之数组

    目录 1.Java数组介绍 ①.数组的声明 ②.访问数组元素以及给数组元素赋值 ③.数组遍历 2.用类封装数组实现数据结构 3.分析数组的局限性 4.总结 1.Java数组介绍 在Java中,数组是用来存放同一种数据类型的集合,注意只能存放同一种数据类型(Object类型数组除外). ①.数组的声明 第一种方式: 数据类型 [] 数组名称 = new 数据类型[数组长度]; 这里 [] 可以放在数组名称的前面,也可以放在数组名称的后面,我们推荐放在数组名称的前面,这样看上去 数据类型 [] 表示

  • Java数组归纳总结

    目录 一.一维数组 1.创建方法 2.初始化数组(一维数组) 二.二维数组 1.创建方法 2.初始化二维数组 三.遍历数组 四.替换元素 五.数组排序 六.数组拷贝 七.元素查询 八.排序算法 1.冒泡排序 2.直接选择排序 3.反转排序 一.一维数组 1.创建方法 数组元素类型 数组名字[]; 数组元素类型[] 数组名字; 比如: int array[];//int 类型数组 String str[];//String类型数组 我们还要给数组申请空间: 数组名字 = new 数组元素的类型[数

  • java 数组实现学生成绩统计教程

    目录 一.项目名称 二.项目描述 1.项目简介 2.程序要求 三.说明 主要讲讲做这题的过程中遇到的问题吧 关于数组操作的10大方法 1.打印Java数组中的元素 2.从Array中创建ArrayList 3.检查数组中是否包含某一个值 4.连接两个数组 5.声明一个数组内链 6.将数组中的元素以字符串的形式输出 7.将Array转化成Set集合 8.数组翻转 9.从数组中移除一个元素 10.将一个int值转化成byte数组 一.项目名称 数组实现学生成绩统计 二.项目描述 1.项目简介 由用户

  • 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

  • 基于Java数组实现循环队列的两种方法小结

    用java实现循环队列的方法: 1.添加一个属性size用来记录眼下的元素个数. 目的是当head=rear的时候.通过size=0还是size=数组长度.来区分队列为空,或者队列已满. 2.数组中仅仅存储数组大小-1个元素,保证rear转一圈之后不会和head相等.也就是队列满的时候.rear+1=head,中间刚好空一个元素. 当rear=head的时候.一定是队列空了. 队列(Queue)两端同意操作的类型不一样: 能够进行删除的一端称为队头,这样的操作也叫出队dequeue: 能够进行插

  • Java基础之数组模拟循环队列

    一.队列简介 队列是一个有序列表,遵循"先入先出"的原则,即先存入队列的数据要先取出,后存入的数据后取出. 队列有两种存储表示,顺序表示和链式表示.顺序表示可以用数组来实现. 二.数组模拟队列 用数组模拟队列时,设两个值front=0,rear=0.front表示队列首部第一个数据所在位置,rear表示尾部最后一个数据的下一个位置. 将数据插入数组队列时(入队),从尾部进行插入,即array[rear] = value,同时rear后移,rear++.取出数据时(出队),从头部取出数据

  • Java用数组实现循环队列的示例

    复习了下数据结构,用Java的数组实现一下循环队列. 队列的类 //循环队列 class CirQueue{ private int QueueSize; private int front; private int rear; private int[] queueList ; public CirQueue(int QueueSize){ this.QueueSize = QueueSize; queueList = new int[QueueSize]; front = 0; rear =

  • Java代码实现循环队列的示例代码

    循环队列结构 队列特点 队列为一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的端称为队头.队列中没有元素时,称为空队列. 队列的数据元素又称为队列元素.在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队.因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO-first i

  • Java 1.8使用数组实现循环队列

    本文实例为大家分享了Java 1.8使用数组实现循环队列的具体代码,供大家参考,具体内容如下 1.引入 使用数组实现循环队列,功能如下: 1)isFull():队列满? 2)isEmpty():队列空? 3)add():添加元素. 4)pop():移除元素. 5)display():展示队列. 6)getSize():获取当前队列元素个数. 2.代码 package DataStructure; import java.util.Arrays; /** * @author: Inki * @em

  • Java数据结构之循环队列简单定义与用法示例

    本文实例讲述了Java数据结构之循环队列简单定义与用法.分享给大家供大家参考,具体如下: 一.概述: 1.原理: 与普通队列的区别在于循环队列添加数据时,如果其有效数据end == maxSize - 1(最大空间)的话,end指针又移动到-1的位置 删除数据时,如果head== maxSize时 head指针移动到0的位置 2.示例图: 二.实现代码: package com.java.queue; /** * @描述 对列 * @项目名称 Java_DataStruct * @包名 com.

  • Java数组模拟优先级队列数据结构的实例

    优先级队列 如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较高的优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了.这样,我们就引入了优先级队列 这种数据结构. 优先级队列(priority queue) 是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有(1)查找(2)插入一个新元素 (3)删除 一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素 .对于优先权相同的元素,可按先进先出次序处理或按任意优先

  • Java元注解Retention代码示例介绍

    1.注解声明:通过@interface就可以声明一个注解. @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface BindView { int value(); } @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Get { String value() default "&

  • Java中的阻塞队列详细介绍

    Java中的阻塞队列 1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列.这两个附加的操作是: 在队列为空时,获取元素的线程会等待队列变为非空. 当队列满时,存储元素的线程会等待队列可用. 阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程.阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素. 2.Java里的阻塞队列 JDK中提供了七个阻塞队列: ArrayBlockingQueue :一个由数组结

随机推荐