java 顺序结构循环队列(源代码)

2023-10-31

1.import java.util.Arrays;  
2.public class LoopQueue<T>  
3.{  
4.    private int DEFAULT_SIZE = 10;  
5.    //保存数组的长度。  
6.    private int capacity;  
7.    //定义一个数组用于保存循环队列的元素  
8.    private Object[] elementData;  
9.    //保存循环队列中元素的当前个数  
10.    private int front = 0;  
11.    private int rear = 0;  
12.    //以默认数组长度创建空循环队列  
13.    public LoopQueue()  
14.    {  
15.        capacity = DEFAULT_SIZE;  
16.        elementData = new Object[capacity];  
17.    }  
18.    //以一个初始化元素来创建循环队列  
19.    public LoopQueue(T element)  
20.    {  
21.        this();  
22.        elementData[0] = element;  
23.        rear++;  
24.    }  
25.    /** 
26.     * 以指定长度的数组来创建循环队列 
27.     * @param element 指定循环队列中第一个元素 
28.     * @param initSize 指定循环队列底层数组的长度 
29.     */  
30.    public LoopQueue(T element , int initSize)  
31.    {  
32.        this.capacity = initSize;  
33.        elementData = new Object[capacity];  
34.        elementData[0] = element;  
35.        rear++;  
36.    }  
37.    //获取循环队列的大小  
38.    public int length()  
39.    {  
40.        if (empty())  
41.        {  
42.            return 0;  
43.        }  
44.        return rear > front ? rear - front   
45.            : capacity - (front - rear);  
46.    }  
47.    //插入队列  
48.    public void add(T element)  
49.    {  
50.        if (rear == front   
51.            && elementData[front] != null)  
52.        {  
53.            throw new IndexOutOfBoundsException("队列已满的异常");  
54.        }  
55.        elementData[rear++] = element;  
56.        //如果rear已经到头,那就转头  
57.        rear = rear == capacity ? 0 : rear;  
58.    }  
59.    //移除队列  
60.    public T remove()  
61.    {  
62.        if (empty())  
63.        {  
64.            throw new IndexOutOfBoundsException("空队列异常");  
65.        }  
66.        //保留队列的rear端的元素的值  
67.        T oldValue = (T)elementData[front];  
68.        //释放队列的rear端的元素  
69.        elementData[front++] = null;   
70.        //如果front已经到头,那就转头  
71.        front = front == capacity ? 0 : front;  
72.        return oldValue;  
73.    }  
74.    //返回队列顶元素,但不删除队列顶元素  
75.    public T element()  
76.    {  
77.        if (empty())  
78.        {  
79.            throw new IndexOutOfBoundsException("空队列异常");  
80.        }  
81.        return (T)elementData[front];  
82.    }  
83.    //判断循环队列是否为空队列  
84.    public boolean empty()  
85.    {  
86.        //rear==front且rear处的元素为null  
87.        return rear == front   
88.            && elementData[rear] == null;  
89.    }  
90.    //清空循环队列  
91.    public void clear()  
92.    {  
93.        //将底层数组所有元素赋为null  
94.        Arrays.fill(elementData , null);  
95.        front = 0;  
96.        rear = 0;  
97.    }  
98.    public String toString()  
99.    {  
100.        if (empty())  
101.        {  
102.            return "[]";  
103.        }  
104.        else  
105.        {  
106.            //如果front < rear,有效元素就是front到rear之间的元素  
107.            if (front < rear)  
108.            {  
109.                StringBuilder sb = new StringBuilder("[");  
110.                for (int i = front  ; i < rear ; i++ )  
111.                {  
112.                    sb.append(elementData[i].toString() + ", ");  
113.                }  
114.                int len = sb.length();  
115.                return sb.delete(len - 2 , len).append("]").toString();  
116.            }  
117.            //如果front >= rear,有效元素为front->capacity之间、0->front之间的  
118.            else  
119.            {  
120.                StringBuilder sb = new StringBuilder("[");  
121.                for (int i = front  ; i < capacity ; i++ )  
122.                {  
123.                    sb.append(elementData[i].toString() + ", ");  
124.                }  
125.                for (int i = 0 ; i < rear ; i++)  
126.                {  
127.                    sb.append(elementData[i].toString() + ", ");  
128.                }  
129.                int len = sb.length();  
130.                return sb.delete(len - 2 , len).append("]").toString();  
131.            }  
132.        }  
133.    }  
134.}  
 

队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,只允许在表的后端(rear)进行插入操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java 顺序结构循环队列(源代码) 的相关文章

  • Angular中父子组件传值@Input @Output @ViewChild最全面最简单的总结

    父组件传递给子组件 值传递方式 Input既可以传递数据也可以传递方法 传递数据 不举例了 传递方法 父组件定义方法 parentRun alert 这是父组件的 run 方法 调用子组件时传入当前方法 是传递方法不是调用方法
  • Element UI el-input 只能输入大于0的正整数

    当输入值以0开头或者不为0 9的整数时 则用 替换掉 g表示全局匹配 则所有匹配项都会被替换掉 效果为不能输入以0开头或不为正整数的值
  • Oracle 基本 SQL 语句查询手册(1):增删改查

    关于SQL语法学习 这里有一份图文并茂的教程 点击此处 针对文字内容进行简化 通过注释 解释语句含义 本文的重点在于Oralce中写法 当然了 大部分写法都是通用的 查询手册 没有配图 各位看官见谅 创建临时表 用于测试 练习基本语句的写法
  • 什么是护网(HVV)?需要什么技术?(内附护网超全资料包)

    一 什么是护网行动 护网行动是以公安部牵头的 用以评估企事业单位的网络安全的活动 具体实践中 公安部会组织攻防两方 进攻方会在一个月内对防守方发动网络攻击 检测出防守方 企事业单位 存在的安全漏洞 通过与进攻方的对抗 企事业单位网络 系统以
  • ping 命令数字波动大的解决方法

    win10ping值不稳定怎么办 我们可以通过ping来判断网络是否流畅 一般来说在ping界面 只要 时间 后面的数值在10以内那么网速就是稳定的 最近在win10系统中有用户反应网速慢的心想 在使用ping进行ping一些网站的时候果然
  • easyUI前端框架tree(树)后台实现(树形菜单一)——java

    转载请标明出处 https blog csdn net men ma article details 106847165 本文出自 不怕报错 就怕不报错的小猿猿 的博客 easyUI前端框架tree 树 后台实现 树形菜单一 java 利用

随机推荐

  • 引领语言智能革命的巨型语言模型 ChatGPT PK Google Bard , Anthropic

    ChatGPT是由OpenAI公司训练的一个大型语言模型 它可以生成人类可读的文本 这是一个基于Transformer架构的预训练模型 可以进行语言生成和语言理解任务 OpenAI公司在2020年推出了ChatGPT 它是世界上最大的语言模
  • 多级代理下Nginx透传真实IP

    文章目录 多级代理下Nginx透传真实IP Nginx RealIP获取真实IP 多级代理下Nginx透传真实IP 1 基于代理 七层负载均衡 情况下 透传客户端的真实IP 环境 10 0 0 5 proxy node1 一级代理10 0
  • ERROR: Failed building wheel for dlib python 3.10 无法下载 pip/conda install dlib库的解决办法

    如果您在Python 3 10版本中无法使用pip安装dlib库 可能是由于以下原因之一 您的Python版本不支持dlib库 请确保您的Python版本与dlib库的版本兼容 您的pip版本不支持dlib库 请确保您的pip版本与dlib
  • plc模拟量与通信控制应用实践_第三版电气控制与PLC应用模块三教材答案

    很高兴这期为你分享干货 让你在困难中找到解决的线索 模块三答案 任务一 思考与练习 1 PLC 主要应用在哪些场合 答 1 开关量逻辑控制 2 模拟量过程控制 3 运动控制 4 现场数据采集处理 5 通讯联网 多级控制 2 PLC 的基本结
  • 文件打包发布

    本文基于VS Qt和VTK环境开发软件 生成可执行文件 通过软件ProcessExplorer查找发布软件所需要的库和通过软件VNISEdit打包该可执行文件 1 添加QT所需要的环境 2 添加VTK所需要的环境 3 文件打包发布 1 添加
  • windows上同时安装两个版本的mysql数据库

    在实际开发中 一些低版本数据库 不支持一些特殊的sql语句 因此高版本数据库数据导入低版本的时候就会出问题 因此 在一些特殊情况下 低版本数据库不能动 高版本mysql数据又无法导入低版本mysql 我们不得不在同一台机器上安装两个版本my
  • 关于使用get请求传递base64的注意事项

    关于使用get请求传递base64的注意事项 我们知道 get请求和post请求是有区别的 1 GET请求是用来请求获取数据 POST一般作为发送数据到后台时使用 并不返回数据 2 GET请求也可传参到后台 但是其参数在浏览器的地址栏的ur
  • Lambdda表达式( Java 8 )

    在Java的语言世界里面 除了基本的数据类型 一切都是对象 例如 String字符串 每个对象实例 数组这些都是对象 在Java中方法是不能完全独立存在的 不能将方法作为参数或者返回值给实例 注意 方法 Method 函数 Function
  • SAP 下载SMW0模板文件并附加数据导入到Excel示例

    1 效果 下载模板后 导入内表数据到Excel 2 代码 关键代码DATA excel TYPE ole2 object Excel object worksheet TYPE ole2 object workbooks TYPE ole2
  • js获取地址栏参数function封装

    获取地址栏参数 function GetQueryString name var reg new RegExp name var r window location search substr 1 match reg if r null r
  • 《每日一题》NO.14:名词解释 后端设计篇

    芯司机 每日一题 会每天更新一道IC面试笔试题 其中有些题目已经被很多企业参考采用了哦 聪明的你快来挑战一下吧 今天是第14题 各大IC公司的笔试题经常会从名词解释开始 所以我们给大家精心准备了50个名词解释题 每天更新10个 务求将名词解
  • 2021-3-26 米斯特安全团队视频笔记二(含PHP)

    DOS命令 常用Dos命令 1 通配符 号 代替0或多个字符 号 代替一个字符 2 查看命令 3 操作命令 信息搜集 whois 备案 PHP 变量 命名格式 美元字符开头 字母 下划线 不能跟数字 特殊符号 name key 常量 通过d
  • HTML <u> 标签

    实例 使用 u 标签为文本添加下划线 p 如果文本不是超链接 就不要 u 对其使用下划线 u p 定义和用法 u 标签可定义下划线文本 浏览器支持 元素 Chrome IE Firefox Safari Opera u Yes Yes Ye
  • maven jetty 插件的使用

    jetty插件的安装 首先打开项目的pom xml文件 然后找到build节点 在其中添加plugins节点 然后再添加如下的插件
  • 清华大学uCore-操作系统内核实现

    本系列文章是学堂在线清华大学操作系统慕课 课程实验 实现uCore内核的讲义总结及个人攻略 如果有对课程感兴趣的朋友建议看原课程 前置知识 即提前要掌握的知识 C语言和汇编语言 数据结构和算法 计算机组成原理 实验内容 Lab1 uCore
  • Rust 学习笔记之内存管理与生命周期

    内存管理是理解低级语言 和硬件相关的 的基础概念 低级语言没有提供自动内存管理的解决方案 例如内置垃圾回收器 它要求程序员自己在程序中管理内存 理解内存何时何地被创建和释放可以使得程序员构建出一个高效 安全的软件 然而 低级语言的大量错误也
  • 设计模式第八讲:观察者模式和中介者模式详解

    一 观察者模式 1 背景 在现实世界中 许多对象并不是独立存在的 其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变 例如 某种商品的物价上涨时会导致部分商家高兴 而消费者伤心 还有 当我们开车到交叉路口时 遇到红灯会
  • perl中CPAN的安装

    最近一直在学习nagios监控的知识 因为使用SNMP方式进行监测 而nagios的SNMP监测文件是pl结尾的perl脚本 所以需要安装CPAN 下面就安装CPAN的安装记录步骤如下 首先安装perl 可以通过yum方式进行安装 这样减少
  • STM32F0不同代码区跳转时总失败…这些操作你做对了吗?

    STMCU官网更新了一则实战经验文件 文章以STM32F0为例 就芯片内 从BOOT区跳转到APP区 从APP区跳转到新APP区 从APP区跳回BOOT区 的跳转问题做一些交流与介绍 更多信息请前往官网详情页 文章导读 对于STM32用户
  • java 顺序结构循环队列(源代码)

    1 import java util Arrays 2 public class LoopQueue