java数据结构——队列、循环队列(Queue)
每天进步一点点,坚持就是成功。
1、队列
/**
* 人无完人,如有bug,还请斧正
* 继续学习Java数据结构————队列(列队)
* 队列和栈一样,都是使用数组,但是队列多了一个队头,队头访问数据,队尾插入数据
* 队列的重要数据特性————先进先出
* 入队、出队、队满、队空、查看
*/
public class Queue {
private long arr[];
private int Maxsize;// 最大容量
private int front;// 队头,访问数据
private int rear;// 队尾,插入数据
private int elements;// 有效数据 public Queue(int size) {
this.Maxsize = size;
arr = new long[Maxsize];
front = 0;// 下标为0开始访问
rear = -1;// 相当于栈的指针
elements = 0;
}
// 有效数据
public void show() {
System.out.println(elements);
}
// 查看当前指向数据
public long peek() {
return arr[front];
}
// 入队
public void add(int value) {
arr[++rear] = value;
elements++;
}
// 出队
public long remove() {
long value = arr[front++];// 队头从0开始
elements--;
return value;
}
// 队满
public boolean isEmpty() {
return elements == 0;
}
// 队空
public boolean isFull() {
return elements == Maxsize;
} public static void main(String[] args) {
Queue q = new Queue(3);
q.add(52);
q.add(2);
q.add(6); while(!q.isEmpty()){
System.out.print(q.remove()+" ");//先进先出
} } }
2、循环队列
队列存在弊端,超过最大长度就会抛出异常,这是不好的,所以我们必须了解循环队列,即使超过长度在添加也是可行的。
//循环队列
public class Queue {
private long arr[];
private int Maxsize;// 最大容量
private int front;// 队头,访问数据
private int rear;// 队尾,插入数据
private int elements;// 有效数据 public Queue(int size) {
this.Maxsize = size;
arr = new long[Maxsize];
front = 0;// 下标为0开始访问
rear = -1;// 相当于栈的指针
elements = 0;
} // 有效数据
public void show() {
System.out.println(elements);
} // 查看当前指向数据
public long peek() {
return arr[front];
} // 入队
public void add(int value) {
if (rear == arr.length - 1) {// rear初始值为-1,下标0-99
rear = -1;// 重置队尾
}
arr[++rear] = value;// 这时候指向第一个位置
elements++;
} // 出队
public long remove() {
long value = arr[front++];// 先执行该句,front是否等于arr.length
if (front == arr.length) {// 2+1=3
front = 0;// 重置队头
}
elements--;
return value;
} // 队满
public boolean isEmpty() {
return elements == 0;
} // 队空
public boolean isFull() {
return elements == Maxsize;
} public static void main(String[] args) {
Queue q = new Queue(3);
q.add(52);
q.add(2);
q.add(6);
q.add(6);
q.add(6); while (!q.isEmpty()) {
System.out.print(q.remove() + " ");// 先进先出
} } }
java数据结构——队列、循环队列(Queue)的更多相关文章
- java数据结构-10循环队列
一.概念: 循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用 二.代码实现: @SuppressWarnings("unchecked" ...
- 【Java】 大话数据结构(7) 循环队列和链队列
本文根据<大话数据结构>一书,实现了Java版的循环队列.链队列. 队列:只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 1.循环队列 队列的顺序储存结构:用数组存储队列,引入 ...
- 用数组实现队列(顺序队列&循环队列)
用数组实现队列(顺序队列&循环队列) 顺序队列 ️ 队列(先进先出) 几个问题: 队列方法:入队.出队 队列的存储:即队首队尾两个指针, 扩容:如果队列容量不够了,应该扩容,如果队尾没有位置了 ...
- Java数组实现循环队列的两种方法
用java实现循环队列的方法: 1.添加一个属性size用来记录眼下的元素个数. 目的是当head=rear的时候.通过size=0还是size=数组长度.来区分队列为空,或者队列已满. 2.数组中仅 ...
- 数据结构:循环队列(C语言实现)
生活中有非常多队列的影子,比方打饭排队,买火车票排队问题等,能够说与时间相关的问题,一般都会涉及到队列问题:从生活中,能够抽象出队列的概念,队列就是一个能够实现"先进先出"的存储结 ...
- java 数据结构与算法---队列
原理来自百度百科 一.队列的定义 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插 ...
- TZOJ 数据结构实验--循环队列
描述 创建一个循环队列,队列元素个数为4.能够实现队列的初始化.入队列.出队列.求队列长度等操作. 循环队列数据类型定义如下: typedef struct{ int data[Max]; in ...
- java数据结构之自定义队列
一.队列的特点 1.队列是线性结构 2.先进先出,先进入队列的排在队列前端,会比后进队列的先出队列.FIFO 二.通过数组来实现队列 //自己实现数组队列,队列的特定就是先进先出 public cla ...
- 数据结构之循环队列Demo
循环队列 比较简单,循环队列主要是判断队满.队空.有效元素个数 画图说明: 假设:队的长度为5(0-4) 但是实际maxsize为6,需要一个预留空间(不存储元素)做计算 继续添加3个元素后: 出队一 ...
- Atitit.升级软件的稳定性---基于数据库实现持久化 循环队列 循环队列
Atitit.升级软件的稳定性---基于数据库实现持久化 循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1 ...
随机推荐
- C++责任链
#include <iostream> using namespace std; class Base{ protected: Base *next; public: Base(Base ...
- Selenium3 + Python3自动化测试系列十——调用JavaScript代码
调用JavaScript代码 一.调用JavaScript代码方法 Selenium在对浏览器操作时会有自动化代码中不稳定的部分,经常出错的部分,可以将这部分对网页元素进行操作的代码换成对应的Java ...
- mybatis 源码分析(六)StatementHandler 主体结构分析
分析到这里的时候,mybatis 初始化.接口.事务.缓存等主要功能都已经讲完了,现在就还剩下 StatementHandler 这个真正干活的家伙没有分析了:所以接下来的博客内容主要和数据库的关系比 ...
- hbase G1 GC优化
本文借鉴之前HBaseConAsia2017,小米公司对hbase g1 gc的优化分享.此外还可以参考apache官方博客对于hbase g1 gc优化的一篇文章(Tuning G1GC For Y ...
- js中尺寸类样式
js中尺寸类样式 一:鼠标尺寸类样式 都要事件对象的配合 Tip:注意与浏览器及元素尺寸分开,鼠标类尺寸样式都是X,Y,浏览器及元素的各项尺寸时Height,Width 1:检测相对于浏览器的位置:e ...
- SpringBoot第二十四篇:应用监控之Admin
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11457867.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言 前一章(S ...
- Mac应用程序无法打开或文件损坏的处理方法你知道吗?
很多用户在安装Mac软件的时候,经常会遇到提示“xxx.app已损坏,打不开.您应该将它移到废纸篓“或”打不开的xxx.app,因为它来自身份不明的开发者”,如下图的样子: 真的损坏了么?是不是真的要 ...
- Mysql高手系列 - 第4天:DDL常见操作汇总
这是Mysql系列第4篇. 环境:mysql5.7.25,cmd命令中进行演示. DDL:Data Define Language数据定义语言,主要用来对数据库.表进行一些管理操作. 如:建库.删库. ...
- java设计模式4.适配器模式、装饰器模式
适配器模式 把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够工作. 1. 类的适配器模式 目标角色:期望的接口,对于类的适配器模式,此角色不可以是具体类 ...
- Spring Cloud开发人员如何解决服务冲突和实例乱窜?(IP实现方案)
一.背景 在我上一篇文章<Spring Cloud开发人员如何解决服务冲突和实例乱窜?>中提到使用服务的元数据来实现隔离和路由,有朋友问到能不能直接通过IP来实现?本文就和大家一起来讨论一 ...