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 ...
随机推荐
- @Validated和@Valid区别
注解地方 @Validated:可以用在类型.方法和方法参数上.但是不能用在成员属性(字段)上 @Valid:可以用在方法.构造函数.方法参数和成员属性(字段)上 两者是否能用于成员属性(字段)上直接 ...
- Java 从入门到进阶之路(三)
之前的文章我们介绍了 Java 中的变量和基本数据类型,本章我们来看一下 Java 的运算符和表达式. 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操 ...
- SpringBoot:高并发下浏览量入库设计
一.背景 文章浏览量统计,low的做法是:用户每次浏览,前端会发送一个GET请求获取一篇文章详情时,会把这篇文章的浏览量+1,存进数据库里. 1.1 这么做,有几个问题: 在GET请求的业务逻辑里进行 ...
- 随笔编号-10 window环境下,命令行导入sql脚本详解
目标:使用window命令行(DOS)导入sql脚本(适用于数据量很大的脚本). 执行步骤: 1 找到mysql bin 文件所在之目录: 2 打开dos命令行界面,win+r 组合键打开运行对话 ...
- 《Effective Java第二版》总结
第1条:考虑用静态工厂方法代替构造器 通常我们会使用 构造方法 来实例化一个对象,例如: // 对象定义 public class Student{ // 姓名 private String name ...
- 支持向量机 (一): 线性可分类 svm
支持向量机(support vector machine, 以下简称 svm)是机器学习里的重要方法,特别适用于中小型样本.非线性.高维的分类和回归问题.本系列力图展现 svm 的核心思想和完整推导过 ...
- 【Java并发】线程的顺序执行
/** * 问题:有线程a.b.c,如何让它们顺序执行? * 方式一:可用Join()方法实现 * 方式二:可用newSingleThreadExecutor() * Created by Smile ...
- D-Big Integer_2019牛客暑期多校训练营(第三场)
题意 设A(n) = n个1,问有多少对i,j使得\(A(i^j)\equiv0(modp)\) 题解 \(A(n) = \frac{10^n-1}{9}\) 当9与p互质时\(\frac{10^n- ...
- 洛谷P1582 倒水 二进制 lowbit __builtin_popcount
P1582 倒水:https://www.luogu.org/problemnew/show/P1582 题意: 给定n瓶装有1升的水瓶,每次可以把两瓶装水量相同的水和成一瓶,问最少还要增加几瓶装有1 ...
- POJ-2018 Best Cow Fences 二分
题意:找到一个连续区间,区间的长度至少大于f,现在要求这个区间的平均值最大. 题解: 二分找答案. 每次对于2分的mid值, 都把原来的区间减去mid, 然后找到一长度至少为f的区间, 他们的区间和& ...