数组模拟环形队列

思路分析

在这里插入图片描述

代码实现

package com.atguigu.queue;import java.util.Calendar;
import java.util.Scanner;/*** @创建人 wdl* @创建时间 2021/3/17* @描述*/
public class CircleArrayQueueDemo {public static void main(String[] args) {//测试一把System.out.println("测试数组模拟环形队列的案例");//创建一个环形队列CircleArray queue = new CircleArray(4);//说明设置4,其队列的有效数据最大是3char 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("g(get):从队列取出数据");System.out.println("h(head):查看队列头的数据");key=scanner.next().charAt(0);//接收一个字符switch (key){case 's':queue.showQueue();break;case 'a':System.out.println("输入一个数");int value=scanner.nextInt();queue.addQueue(value);break;case 'g'://取出数据try {int res=queue.getQueue();System.out.println("取出的数据是:"+res);} catch (Exception e) {System.out.println(e.getMessage());}break;case 'h'://查看队列头的数据try {int res = queue.headQueue();System.out.println("队列头的数据是:"+res);} catch (Exception e) {System.out.println(e.getMessage());}break;case 'e'://退出scanner.close();loop=false;break;default:break;}}System.out.println("程序退出");}
}class CircleArray{private int maxSize;//数组的最大容量private int front;/* front 变量的含义做一个调整: front 就指向队列的第一个元素, 也就是说 arr[front] 就是队列的第一个元素front 的初始值 = 0*/private  int rear;/*rear 变量的含义做一个调整:rear 指向队列的最后一个元素的后一个位置. 因为希望空出一个空间做为约定.rear 的初始值 = 0*/private int[] arr;//该数组用于存放数据,模拟队列public CircleArray(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=(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.println("arr["+i%maxSize+"]"+"="+arr[i%maxSize]);}}//求出当前队列有效数据的个数public int size(){//rear=3//front=0//maxSize=3return (rear+maxSize-front)%maxSize;}//显示队列的头数据,注意不是取出数据public int headQueue(){//判断if(isEmpty()){throw new RuntimeException("队列空的,没有数据");}return arr[front];//因为front指向队列头的前一个位置}
}

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

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

相关文章

Error:(1, 10) java: 需要class, interface或enum

https://blog.csdn.net/zf18234031156/article/details/103047649 反复做这一步&#xff0c;30多个文件一个一个弄&#xff0c;有乱码用txt打开&#xff0c;黏贴覆盖&#xff0c; 目录 1.前言 2.原因(UTF-8BOM造成) 3.如何解决 3.11使用Notepad&#xff0c;选择“格式--以…

彻底理解ThreadLocal

转载自 彻底理解ThreadLocal 先总述&#xff0c;后分析 深挖过threadLocal之后&#xff0c;一句话概括&#xff1a;Synchronized用于线程间的数据共享&#xff0c;而ThreadLocal则用于线程间的数据隔离。所以ThreadLocal的应用场合&#xff0c;最适合的是按线程多实例&#xff…

云计算设计模式(四)——消费者的竞争模式

允许多个并发用户处理在同一个通讯通道接收的消息。这种模式使系统能够同时处理多个邮件&#xff0c;以优化吞吐量&#xff0c;提高可扩展性和可用性&#xff0c;以及平衡工作负载。 背景和问题 在云中运行的应用程序&#xff0c;可以预计&#xff0c;以处理大量的请求。而不是…

前后端分离趋势谈

最近已经不止一个人和我提起过vue了&#xff0c;在我的前端印象中&#xff0c;我还停留在smarty渲染模版&#xff0c;jquery做js处理。学了一晚上&#xff0c;对现在这种工程化webpack打包生成html&#xff0c;js&#xff0c;css的生产方式越来越有兴趣了。工作年限摆在这里的好…

云计算设计模式(五)——计算资源整合模式

合并多个任务或操作成一个单一的计算单元。这种模式可以提高计算资源的利用率&#xff0c;并降低与云托管的应用程序进行计算处理相关的成本和管理开销。 背景和问题 云应用程序频繁执行各种操作。在某些解决方案也可能是有意义的最初遵循的关注点分离的设计原则&#xff0c;并…

Visual Studio 2017 RC3支持.NET Core,延迟对Python的支持

Visual Studio 2017第三个候选版本上周发布&#xff0c;解决了之前发现的安装程序的小问题。由于这些问题得到了解决&#xff0c;现在值得关注的就是这次版本中更新了什么内容。&#xff08;版本是发布于1月27日的build 26127.00&#xff09; RC3版本中最值得关注的部分就是对N…

虚拟研讨会:.NET的未来在哪里?

.NET生态系统在过去的一年中发生了很多事情。在几个方面发展非常迅速&#xff1a;Xamari、UWP、.NET Core、.NET native、F#和开源等等。 如果要关注细节&#xff0c;那大的景象难以描绘。因为在每个方面都有新的动作&#xff1a;跨平台、云、移动、Web应用和通用应用。开发人员…

使用Servlet上传多张图片——访问提示

上传文件&#xff0c;我们在做项目中补课避免的&#xff0c;有时候我们需要上传单张或者单个文件&#xff0c;但是有时候我们就需要上传多个文件或者多张图片了&#xff0c;我们这里以多张&#xff08;4张&#xff09;图片为例&#xff0c;再多也都是一样的概念&#xff0c;接下…

云计算设计模式(六)——命令和查询职责分离(CQRS)模式

隔离&#xff0c;通过使用不同的接口&#xff0c;从操作读取数据更新数据的操作。这种模式可以最大限度地提高性能&#xff0c;可扩展性和安全性;支持系统在通过较高的灵活性&#xff0c;时间的演变;防止更新命令&#xff0c;从造成合并在域级别上的冲突。 背景和问题 在传统的…

Intellij IDEA 那些隐藏好用的小技巧

转载自 Intellij IDEA 那些隐藏好用的小技巧 概述 之前写了一篇介绍IntellIJ IDEA的文章《 Intellij Idea非常6的10个姿势 》&#xff0c;主要是列出一些平时大家可能没用过或者没怎么用&#xff0c;但是又非常好用的IntellIJ IDEA小技巧。由于篇幅原因&#xff0c;只是列出了…

约瑟夫(环)问题(Josephu)(单向环形链表)

问题描述 代码实现 package com.atguigu.linkedlist;import com.sun.org.apache.bcel.internal.generic.NEW;/*** 创建人 wdl* 创建时间 2021/3/19* 描述*/ public class Josepfu {public static void main(String[] args) {//测试一把看看构建的环形链表和遍历是否正确Circle…

vue+vscode+nodejs 开发环境搭建

参考文献 vuevscodenodejs 开发环境搭建 - Desperador - 博客园 nodejs 指定全局安装路径和缓存路径 - Curedfisher - 博客园 安装配置nodejs并创建Vue项目 vscode下载地址&#xff1a; Documentation for Visual Studio Code nodejs安装配置 1.下载 地址&#xff1a; …

用数组模拟栈

思路分析 代码实现 package com.atguigu.stack;import com.sun.org.apache.xml.internal.dtm.ref.sax2dtm.SAX2DTM2;import java.net.ServerSocket; import java.util.ArrayList; import java.util.Scanner; import java.util.Stack;/*** 创建人 wdl* 创建时间 2021/3/20* 描述…

Redis PK Memcached,哪个更牛叉

转载自 Redis PK Memcached&#xff0c;哪个更牛叉 说到 redis 就会联想到 memcached&#xff0c;反之亦然。了解过两者的同学有那么个大致的印象&#xff1a; redis 与 memcached 相比&#xff0c;不仅支持简单的 key-value 数据类型&#xff0c;同时还提供 list,set,zset,ha…

CoreCLR源码探索(三) GC内存分配器的内部实现

在前一篇中我讲解了new是怎么工作的, 但是却一笔跳过了内存分配相关的部分.在这一篇中我将详细讲解GC内存分配器的内部实现.在看这一篇之前请必须先看完微软BOTR文档中的"Garbage Collection Design",原文地址是: https://github.com/dotnet/coreclr/blob/master/Doc…

vue学习1

P1 01_Vue学习目标03:50 P2 02_前端知识体系16:27 P3 03_前后端分离的演变史17:13 P4 04_前端MVVM模式09:31 P5 05_Vue是什么07:23 P6 06_第一个Vue应用程序07:06 P7 07_Vue实例声明周期05:35 P8 08_条件渲染06:59 P9 09_列表渲染03:34 P10 10_事件处理03:44…

Tomcat 的 Server 文件配置详解

转载自 Tomcat 的 Server 文件配置详解 前言 Tomcat隶属于Apache基金会&#xff0c;是开源的轻量级Web应用服务器&#xff0c;使用非常广泛。server.xml是Tomcat中最重要的配置文件&#xff0c;server.xml的每一个元素都对应了Tomcat中的一个组件&#xff1b;通过对xml文件中…