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

 更新时间:2017年10月24日 10:09:36   作者:CharlinGod  
这篇文章主要介绍了Java数据结构之循环队列简单定义与用法,简要描述了循环队列的概念、原理,并结合实例形式分析了java循环队列的定义与使用方法,需要的朋友可以参考下

本文实例讲述了Java数据结构之循环队列简单定义与用法。分享给大家供大家参考,具体如下:

一、概述:

1、原理:

与普通队列的区别在于循环队列添加数据时,如果其有效数据end == maxSize - 1(最大空间)的话,end指针又移动到-1的位置

删除数据时,如果head== maxSize时 head指针移动到0的位置

2、示例图:

二、实现代码:

package com.java.queue;
/**
 * @描述 对列
 * @项目名称 Java_DataStruct
 * @包名 com.java.stack
 * @类名 Queue
 * @author chenlin
 * @version 1.0
 * @SVN $Rev$
 */
public class CycleQueue {
 private long[] arr;
 private int maxSize;// 最大空间
 private int len;// 有效长度
 private int head;// 队头
 private int end;// 队尾
 public CycleQueue(int size) {
 this.maxSize = size;
 this.arr = new long[maxSize];
 this.len = 0;
 this.head = 0;
 this.end = -1;
 }
 /**
 * 从队尾插入数据
 *
 * @param value
 */
 public void insert(long value) {
 //如果满了,为什么是maxSize - 1 ,因为从-1开始
 if (end == maxSize - 1) {
  end = -1;
 }
 arr[++end] = value;
 len++;
 }
 /**
 * 从队头移除数据
 */
 public long remove() {
 long result = arr[head++];
 if (head == maxSize) {
  head = 0;
 }
 len--;
 return result;
 }
 /**
 * 判断是否为空
 *
 * @return
 */
 public boolean isEmpty() {
 return (len == 0);
 }
 /**
 * 判断是否满了
 *
 * @return
 */
 public boolean isFull() {
 return (len == maxSize);
 }
 /**
 * 获得队列的有效长度
 *
 * @return
 */
 public int size() {
 return len;
 }
 public static void main(String[] args) {
 CycleQueue queue = new CycleQueue(50);
 queue.insert(22);
 queue.insert(33);
 queue.insert(44);
 queue.insert(534);
 queue.insert(21);
 queue.insert(55);
 System.out.println("脚本之家测试结果:");
 while (!queue.isEmpty()) {
  System.out.print(queue.remove() + " ");
 }
 System.out.println();
 queue.insert(33);
 queue.insert(13);
 queue.insert(23);
 while (!queue.isEmpty()) {
  System.out.print(queue.remove() + " ");
 }
 }
}

运行结果:

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • Springboot使用Spring Data JPA实现数据库操作

    Springboot使用Spring Data JPA实现数据库操作

    Spring Data JPA 是 Spring 基于 Spring Data 框架、在JPA 规范的基础上开发的一个框架,使用 Spring Data JPA 可以极大地简化JPA 的写法,本章我们将详细介绍在Springboot中使用 Spring Data JPA 来实现对数据库的操作
    2021-06-06
  • Java 生成随机验证码图片的示例

    Java 生成随机验证码图片的示例

    这篇文章主要介绍了Java 生成随机验证码图片的示例,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-10-10
  • Fluent Mybatis零xml配置实现复杂嵌套查询

    Fluent Mybatis零xml配置实现复杂嵌套查询

    本文主要介绍了Fluent Mybatis零xml配置实现复杂嵌套查询,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Kotlin中的抽象类实现

    Kotlin中的抽象类实现

    这篇文章主要介绍了Kotlin中的抽象类实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • ObjectInputStream 和 ObjectOutputStream 介绍_动力节点Java学院整理

    ObjectInputStream 和 ObjectOutputStream 介绍_动力节点Java学院整理

    ObjectInputStream 和 ObjectOutputStream 的作用是,对基本数据和对象进行序列化操作支持。本文给大家详细介绍了ObjectInputStream 和 ObjectOutputStream的相关知识,感兴趣的朋友一起学习吧
    2017-05-05
  • Java面试题冲刺第二天--Redis篇

    Java面试题冲刺第二天--Redis篇

    这篇文章主要为大家分享了最有价值的三道java面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Java基础-封装和继承

    Java基础-封装和继承

    这篇文章主要介绍了Java面向对象编程(封装/继承/多态)实例解析的相关内容,具有一定参考价值,需要的朋友可以了解下希望可以帮助到你
    2021-07-07
  • Spring Boot详解整合JWT教程

    Spring Boot详解整合JWT教程

    JWT是目前比较流行的跨域认证解决方案,本文主要介绍了SpringBoot整合JWT的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • SpringBoot定时任务的实现详解

    SpringBoot定时任务的实现详解

    这篇文章主要介绍了SpringBoot定时任务的实现详解,定时任务是企业级开发中最常见的功能之一,如定时统计订单数、数据库备份、定时发送短信和邮件、定时统计博客访客等,简单的定时任务可以直接通过Spring中的@Scheduled注解来实现,需要的朋友可以参考下
    2024-01-01
  • java分布式面试CAP分别代表含义分析

    java分布式面试CAP分别代表含义分析

    这篇文章主要为大家介绍了java分布式面试中关于CAP分别代表含义的问题分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03

最新评论