队列的一种实现:循环队列
时间:2022-07-24
本文章向大家介绍队列的一种实现:循环队列,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
队列的一种实现,循环队列,通过使用固定长度数组及首尾指针实现队列的入队、出队等:
class CircularQueue<T> {
private Object[] data; //数据存储数组
private int head; //队列头指针
private int tail; //队列尾指针
private int size; //队列长度
/**
* 初始化
*
* @param k
*/
public CircularQueue(int k) {
data = new Object[k]; //数组初始化
head = -1;
tail = -1;
size = k;
}
/**
* 元素入队,成功则返回true,否则false
*
* @param value
* @return
*/
public boolean put(T value) {
if (isFull() == true) { //入队,判断队满
return false;
}
if (isEmpty() == true) { //入队,队空,则head置0
head = 0;
}
tail = (tail + 1) % size; //循环队列,队尾循环移动,所以使用取余的方式移动队尾
data[tail] = value; //将入队元素放入队列
return true;
}
/**
* 出队
*
* @return
*/
public T remove() {
T result = null;
if (isEmpty() == true) { //出队、判断队空
return result;
}
if (head == tail) { //队首 队尾重合,则当前队列只剩唯一元素
result = (T) data[tail];
head = -1;
tail = -1;
return result;
}
result = (T) data[head];
data[head] = null;
head = (head + 1) % size;
return result;
}
/**
* 获取队首元素
*
* @return
*/
public T head() {
if (isEmpty() == true) {
return null;
}
return (T) data[head];
}
/**
* 获取队尾元素
*
* @return
*/
public T tail() {
if (isEmpty() == true) {
return null;
}
return (T) data[tail];
}
/** 对空判断
*
* @return
*/
public boolean isEmpty() {
return head == -1;
}
/** 对满判断
*
* @return
*/
public boolean isFull() {
return ((tail + 1) % size) == head; //尾指针再移动一位则与头指针重合
}
public String toString(){
StringBuilder str = new StringBuilder();
for (Object datum : data) {
if (datum != null) {
str.append(datum);
}
}
return str.toString();
}
public static void main(String[] args) {
CircularQueue queue = new CircularQueue<Integer>(5);
queue.put(5);
queue.put(3);
queue.put(1);
System.out.println(queue);
System.out.println(queue.head());
System.out.println(queue.tail());
queue.remove();
System.out.println(queue);
System.out.println(queue.head());
System.out.println(queue.tail());
}
}
- Attribute(特性),怎么用才更好?
- 如何使用Airgeddon搭建基于软件的WIFI干扰器
- 还在写SQL的同志,去喝杯咖啡吧!
- 使用XSD编写具有智能提示的XML文件(以SQL-MAP脚本为实例)
- 一个利用CVE-2017-11292的APT样本技术分析(一)
- Attribute(特性),怎么用才更好? —— 字段编号被误解了
- PDF.NET的SQL日志 ASP.net 路径问题 详解
- 【自然框架】稳定版beta1——源码下载,Demo说明
- TOP语句放到表值函数外,效率异常低下的原因分析
- 常见.NET功能代码汇总 (3) 33,彻底关闭Excel进程
- Vue.js 入门指南之“前传”(含sublime text 3 配置) 1,下载安装Node.js2,配置Vue环境3,Vue初探4,配置sublime Text
- JavaScript的“原型甘露”
- JSP开发过程遇到的中文乱码问题及解决方法
- 求连续操作(登录)数量(次数)最大的记录(用户)
- 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 数组属性和方法
- 实用FRIDA进阶:内存漫游、hook anywhere、抓包
- 聊聊claudb的server command
- BFE.dev前端刷题88 - 在JavaScript中实现负索引
- Springboot 原理
- Qt音视频开发17-海康sdk解码
- pytest文档47-allure报告添加用例失败截图
- [060]监听应用的前后台切换
- 借用 potplayer 播放器,在本地播放 b 站视频也能看弹幕了
- 非Spring项目管理Quartz
- ArrayList并发写出现Null值
- 那些有趣的网站系列(四)
- 纯CSS实现吸附效果
- Hexo-Matery主题性能优化
- 精选MAC应用推荐,让你搬砖效率翻倍!
- 【JAVA基础&高级】“面向对象篇” 知识点汇总