循环队列的java结构_java数据结构之循环队列(数组实现)

package com.ws.队列.数组环形队列;

//环形数组队列

//判断满:尾+1%队列长度==头

//添加数据:要(尾+1)%数组长度

//取出数据:要(头+1)%数组长度 因为这两个都是循环的,相当于一个圆环,%数组长度就是转圈

//队列有效数据个数:(尾+数组长度-头)%数组长度 数组因为是个圈,所以可能出现头>尾的情况,所以要提前转一圈,保证尾>头

//取数据:i%数组长度

//因为到最后一个时判断空是尾+1然后取余,实际数组最后一个空间存不上,所以实际的有效队列长度是maxSize-1

import java.util.Scanner;

public class ArrayQueue {

public static void main(String[] args) {

//测试

Array array=new Array(3);

char key=' ';//接收用户输入

Scanner scanner=new Scanner(System.in);

boolean loop=true;

while (loop){

System.out.println("a:显示队列");

System.out.println("b:退出程序");

System.out.println("c:添加数据到队列");

System.out.println("d:从队列取出数据");

System.out.println("e:显示队列头数据");

key=scanner.next().charAt(0);//接收一个字符

switch (key){

case 'a':

array.printqueue();

break;

case 'c':

System.out.println("输入一个数");

int value=scanner.nextInt();

array.addArray(value);

break;

case 'd':

try {

int get=array.getArray();

System.out.println("取出的数据是:"+get);

}catch (Exception e){

System.out.println(e.getMessage());

}

break;

case 'e':

try {

System.out.println("队列头数据是:"+array.printtou());

}catch (Exception e){

System.out.println(e.getMessage());

}

break;

case 'b':

scanner.close();

loop=false;

break;

default:

break;

}

}

System.out.println("程序退出");

}

}

//使用数组模拟一个队列

class Array{

private int maxSize;//数组最大容量

private int tou;//队列头

private int wei;//队列尾

private int arr[];//数组,存数据

//创建队列构造器

public Array(int maxSize){

this.maxSize=maxSize;

arr=new int[maxSize];

tou=0;//队列头数据

wei=0;//队列尾数据

}

//判断队列是否满

public boolean ifMax(){

return (wei+1)%maxSize==tou;

}

//判断队列是否为空

public boolean ifFull(){

return tou==wei;

}

//添加数据到队列

public void addArray(int queue){

//判断队列是否满

if (ifMax()){

System.out.println("队列满不能添加数据");

return;

}

//直接将数据加入

arr[wei]=queue;

//尾后移,得考虑取模

wei=(wei+1)%maxSize;

}

//出队列

public int getArray(){

//判断队列是否为空

if (ifFull()){

//抛出异常

throw new RuntimeException("队列为空!不能取数据");

}

//指向队列第一个元素

int value=arr[tou];

tou=(tou+1)%maxSize;

return value;

}

//显示队列的所有数据

public void printqueue(){

if (ifFull()){

System.out.println("队列为空,没有数据");

return;

}

//从头开始遍历,遍历有效数据个数

for (int i=tou;i

System.out.printf("arr[%d]=%d\n",i%maxSize,arr[i%maxSize]);

}

}

//求出当前队列有效数据个数

public int size(){

return (wei+maxSize-tou)%maxSize;//就是转圈

}

//显示队列的头是

public int printtou(){

//判断队列空

if (ifFull()){

throw new RuntimeException("队列空,无头数据");

}

return arr[tou];

}

}

标签:java,队列,System,int,maxSize,println,数据结构,out

来源: https://blog.csdn.net/wangshuo2020/article/details/112403087

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

形式化验证工具TLA+:程序员视角的入门之道

简介: 女娲是飞天分布式系统中提供分布式协同的基础服务,支撑着阿里云的计算、网络、存储等几乎所有云产品。在女娲分布式协同服务中,一致性引擎是核心基础模块,支持了Paxos,Raft,EPaxos等多种一致性协议&a…

性能突出的 Redis 是咋使用 epoll 的?

作者 | 闪客来源 | 低并发编程我是个 redis 服务,我马上就要启动了因为我的主人正在控制台输入:./redis-server宏观上看下我的流程突然,主人按下了回车键,不得了了。shell 程序把我的程序加载到了内存,开始执行我的 ma…

阿里云重磅发布业务中台产品 BizWorks,中台发展进入下一个阶段

简介: 业务中台产品BizWorks重磅发布,这可以看作是阿里云在 “做厚中台” 战略上继 “云钉一体”之后的又一个新动作! 10 月 19 日,2021 云栖大会正式开幕,连续举办多年的云栖大会俨然已经成为了国内科技产业展示前沿…

java32位怎么用eclipse_无法在Windows 7 32位上打开eclipse

我正在使用Eclipse Indigo(eclipse-jee-indigo-SR2-win32) . 当我双击eclipse.exe时,会出现以下对话框:日志文件的内容如下:!SESSION 2013-05-27 17:55:26.853 -----------------------------------------------eclipse.buildIdM20120208-080…

云栖发布|企业级互联网架构全新升级 ,助力数字创新

简介: 云原生产品家族全面升级,让业务技术团队有了更多选择,通过简单、丰富、开放和低成本的 PaaS 服务,帮助企业客户更简单、更高效的进行在云上创新,搭建更符合业务需要和团队情况的技术体系。 作者|白玙…

当类的泛型相关时,如何在两个泛型类之间创建类似子类型的关系呢

作者 | 阿Q来源 | 阿Q说代码事情是这样的:对话中的截图如下:看了阿Q的解释,你是否也和“马小跳”一样存在疑问呢?请往👇看我们都知道在java中,只要是类型兼容,就可以将一种类型的对象分配给另一…

java 垃圾回收 新生代_Java垃圾回收

一、概述Java垃圾回收器实现内存的自动分配和回收,这两个操作都发生在Java堆上(还包括方法区,即永久代)。垃圾回收操作不是实时的发生(对象死亡不会立即释放),当内存消耗完或者是达到某一指标(threshold,使用内存占总内存的比列,比…

一图看懂云栖大会「云原生」发布

简介: 云原生产品全新升级 原文链接 本文为阿里云原创内容,未经允许不得转载。

明明还有大量内存,为啥报错“无法分配内存”?

作者 | 张彦飞allen来源 | 开发内功修炼近日小伙伴和我说了线上服务器出现一个诡异的问题,执行任何命令都是报错“fork:无法分配内存”。这个问题最近出现的,前几次重启后解决的,但是每隔 2-3 天就会出现一次。# service docker stop -bash f…

先行一步,7大技术创新和突破,阿里云把 Serverless 领域的这些难题都给解了

简介: 函数计算 FC 首创 GPU 实例、业内首发实例级别可观测和调试、率先提供端云联调和多环境部署能力、GB 级别镜像启动时间优化至秒级、VPC 网络建连优化至200ms,Serverless 应用引擎 SAE 支持微服务框架无缝迁移、无需容器化改造、业内首创混合弹性策…

基于Delta lake、Hudi格式的湖仓一体方案

简介: Delta Lake 和 Hudi 是流行的开放格式的存储层,为数据湖同时提供流式和批处理的操作,这允许我们在数据湖上直接运行 BI 等应用,让数据分析师可以即时查询新的实时数据,从而对您的业务产生即时的洞察。MaxCompute…

如何新建java内部类_java内部类-1(内部类的定义)

小胖从官网出发,研究下为什么我们需要些内部类,内部类的区别和联系。思考三个问题:(1)为什么需要内部类?静态内部类和非静态内部类有什么区别;(2)为什么内部类可以无条件访问外部类成员;(3)为什么jdk1.8之前…

stack vs heap:栈区分配内存快还是堆区分配内存快 ?

作者 | 码农的荒岛求生来源 | 码农的荒岛求生有伙伴问到底是从栈上分配内存快还是从堆上分配内存快,这是个比较基础的问题,今天就来聊一聊。栈区的内存申请与释放毫无疑问,显然从栈上分配内存更快,因为从栈上分配内存仅仅就是栈指…

CDP 平台简介

简介: EDC 建立在 Cloudera Data Platform(CDP) 之上,该产品结合了 Cloudera Enterprise Data Hub 和 Hortonworks Data Platform Enterprise 的优点,并在技术堆栈中增加了新功能和对已有技术提供了增强功能。这种统一的发行是一个可扩展且可…

400倍加速, PolarDB HTAP实时数据分析技术解密

简介: PolarDB MySQL是因云而生的一个数据库系统, 除了云上OLTP场景,大量客户也对PolarDB提出了实时数据分析的性能需求。对此PolarDB技术团队提出了In-Memory Column Index(IMCI)的技术方案,在复杂分析查询场景获得的数百倍的加速…

java帐篷_Java多线程之 Park和Unpark(十四)

介绍Park 和 Unpark 均是 LockSupport 类中的方法//暂停当前线程LockSupport.park();//恢复某个线程LockSupport.unpark(暂停线程对象);先 park 再unparkThread thread new Thread(() -> {System.out.println("start.....");try {Thread.sleep(1000);} catch (In…

建立数字化、学习型人事平台,HR 与业务终于不再「隔空对话」

本篇文章暨 CSDN《中国 101 计划》系列数字化转型场景之一。 《中国 101 计划——探索企业数字化发展新生态》为 CSDN 联合《新程序员》、GitCode.net 开源代码仓共同策划推出的系列活动,寻访一百零一个数字化转型场景,聚合呈现并开通评选通道&#xff…

OpenYurt 深度解读|开启边缘设备的云原生管理能力

简介: 北京时间 9 月 27 号,OpenYurt 发布 v0.5.0 版本。新发布版本中首次提出 kubernetes-native非侵入、可扩展的边缘设备管理标准,使 Kubernetes 业务负载模型和 IOT 设备管理模型无缝融合。 作者|贾燚星(VMware), 何淋波(阿里…

Cloudera Manager 术语和架构

简介: 本文介绍了Cloudera Manager 的常见术语和架构 Cloudera Manager 术语 为了有效地使用Cloudera Manager,您应该首先了解其术语。 术语之间的关系如下所示,其定义如下: 有时,术语服务和角色用于同时指代类型和…

冬奥网络安全卫士被表彰突出贡献,探寻冬奥背后的安全竞技

奥运史上首次公开招募白帽子担任“冬奥网络安全卫士”。 据统计,从冬奥会开始到冬残奥会闭幕式结束,奇安信共检测日志数量累积超1850亿,日均检测日志超37亿,累计发现修复漏洞约5800个,发现恶意样本54个,排查…