队列
时间:2020-05-09
本文章向大家介绍队列,主要包括队列使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
循环队列
package queue;
public class CircularQueue {
private int first; //队首数据
private int last; //队尾数据
private Object[] array;
//无参构造
public CircularQueue() {
this(6); //调用有参构造
}
//有参构造
public CircularQueue(int length) {
array = new Object[length];
first = -1;
last = -1;
}
//获取队首数据所在队列的位置
public final int getFirst() {
if(isEmpty()) {
throw new RuntimeException("队列为空,无法获取队首数据位置");
}else if(first == -1) { //存在数据时,第一次时获取时,队首的位置由-1改为0
return 0;
}
return first%array.length;
}
//获取队尾数据所在队列的位置
public final int getLast() {
if(isEmpty()) {
throw new RuntimeException("队列为空,无法获取队尾数据位置");
}else if(last == -1) { //存在数据时,第一次时获取时,队尾的位置由-1改为0
return 0;
}
return last%array.length;
}
//判断队列是否为空
public boolean isEmpty() {
if(first !=-1) {
return first-1==last;
}
return first == last;
}
// 添加数据
public void add(Object e) {
if ((last + 1) % array.length == first || last - first == 6) {
throw new RuntimeException("队列已满");
}
// 队尾指针先向后移动,在赋值到队尾
array[(++last) % array.length] = e;
}
// 获取数据
public Object get() {
if (isEmpty()) {
throw new RuntimeException("队列为空");
}else if (first == -1) {
first = 0;
return array[(first++) % array.length];
} else {
return array[(first++) % array.length];
}
}
// 打印队列,从队首数据到队尾数据
public String showFirstToLast() {
StringBuffer buffer = new StringBuffer("[");
if (isEmpty()) { // 判断是否为空队列
;
} else if (first == -1) { // 判断是否有出过队列的数据,条件成立则没有出过,且此时first<last
for (int temp = 0; temp <= last; temp++) {
if (temp == last) {
buffer.append(array[temp]);
} else {
buffer.append(array[temp] + ",");
}
}
} else if(first > last) { // 判断是否循环了,条件成立则此时已经循环
for (int temp = first; temp <= last + array.length; temp++) {
if (temp == last) {
buffer.append(array[temp]);
} else {
buffer.append(array[temp] + ",");
}
}
} else {
for (int temp = first; temp <= last; temp++) {
if (temp == last) {
buffer.append(array[temp%array.length]);
} else {
buffer.append(array[temp%array.length] + ",");
}
}
}
buffer.append("]");
return buffer.toString();
}
}
原文地址:https://www.cnblogs.com/yl-995820/p/12859331.html
- PHP数据结构(九) ——图的定义、存储与两种方式遍历
- 使用 React 和 Django REST Framework 构建你的网站
- 小程序中带图片modal的实现
- 号称「永远不会输钱」的马丁格尔策略
- 小程序中图片高度等比缩放
- 三分钟使用 Python 处理 Nginx 日志
- Python,Shell 和 三个标准文件
- 【微信官方】获取用户信息方案介绍
- 【实战】如何使用 Python 从 Redis 中删除 4000万 KEY
- [多图] DevOps 也要懂点 Excel
- [实战篇] Python 运维中使用并发
- PHP数据结构(十) ——有向无环图与拓扑算法
- PHP数据结构(十一) ——图的连通性问题与最小生成树算法(1)
- 优化 MySQL: 3 个简单的小调整
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 简述PHP7.4 新特性和废弃的功能
- laravel5.1框架下的批量赋值实现方法分析
- Laravel框架环境与配置操作实例分析
- 记Laravel调用Gin接口调用formData上传文件的实现方法
- Laravel框架视图和模型操作方法分析
- 接口测试框架实战(六) | 配置的数据驱动
- PHP连续签到功能实现方法详解
- PHP实现发送微博消息功能完整示例
- php实现快速对二维数组某一列进行组装的方法小结
- PHP实现提取多维数组指定一列的方法总结
- PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
- Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解
- Laravel框架下载,安装及路由操作图文详解
- PHP实用小技巧之调用录像的方法
- Laravel重定向,a链接跳转,控制器跳转示例