每天进步一点点,坚持就是成功。

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)的更多相关文章

  1. java数据结构-10循环队列

    一.概念: 循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用 二.代码实现: @SuppressWarnings("unchecked" ...

  2. 【Java】 大话数据结构(7) 循环队列和链队列

    本文根据<大话数据结构>一书,实现了Java版的循环队列.链队列. 队列:只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 1.循环队列 队列的顺序储存结构:用数组存储队列,引入 ...

  3. 用数组实现队列(顺序队列&循环队列)

    用数组实现队列(顺序队列&循环队列) 顺序队列 ️ 队列(先进先出) 几个问题: 队列方法:入队.出队 队列的存储:即队首队尾两个指针, 扩容:如果队列容量不够了,应该扩容,如果队尾没有位置了 ...

  4. Java数组实现循环队列的两种方法

    用java实现循环队列的方法: 1.添加一个属性size用来记录眼下的元素个数. 目的是当head=rear的时候.通过size=0还是size=数组长度.来区分队列为空,或者队列已满. 2.数组中仅 ...

  5. 数据结构:循环队列(C语言实现)

    生活中有非常多队列的影子,比方打饭排队,买火车票排队问题等,能够说与时间相关的问题,一般都会涉及到队列问题:从生活中,能够抽象出队列的概念,队列就是一个能够实现"先进先出"的存储结 ...

  6. java 数据结构与算法---队列

    原理来自百度百科 一.队列的定义 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插 ...

  7. TZOJ 数据结构实验--循环队列

    描述 创建一个循环队列,队列元素个数为4.能够实现队列的初始化.入队列.出队列.求队列长度等操作. 循环队列数据类型定义如下: typedef struct{ int data[Max];    in ...

  8. java数据结构之自定义队列

    一.队列的特点 1.队列是线性结构 2.先进先出,先进入队列的排在队列前端,会比后进队列的先出队列.FIFO 二.通过数组来实现队列 //自己实现数组队列,队列的特定就是先进先出 public cla ...

  9. 数据结构之循环队列Demo

    循环队列 比较简单,循环队列主要是判断队满.队空.有效元素个数 画图说明: 假设:队的长度为5(0-4) 但是实际maxsize为6,需要一个预留空间(不存储元素)做计算 继续添加3个元素后: 出队一 ...

  10. Atitit.升级软件的稳定性---基于数据库实现持久化 循环队列 循环队列

    Atitit.升级软件的稳定性---基于数据库实现持久化  循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1 ...

随机推荐

  1. SpingBoot:整合Elasticsearch7.2.0

    Spring boot 2.1.X整合Elasticsearch最新版的一处问题 新版本的Spring boot 2的spring-boot-starter-data-elasticsearch中支持 ...

  2. shift键复选dataGrid的记录时多余的文本总被选择了。

    document.onkeydown = function(event) { if (event.shiftKey) { document.onselectstart = function(event ...

  3. 图解Java数据结构之队列

    本篇文章,将对队列进行一个深入的解析. 使用场景 队列在日常生活中十分常见,例如:银行排队办理业务.食堂排队打饭等等,这些都是队列的应用.那么队列有什么特点呢? 我们知道排队的原则就是先来后到,排在前 ...

  4. 初学HTML5做的小知识点

    新增的HTML5标签 语义化标签 :<header> 头标签      <nav> 导航标签      <section> 表示文档的结构.栏目      < ...

  5. Linux 用户和组 权限管理 常用命令与参数

    ========================================================================== 1.基本概念: 所有者 : 一般为文件的创建者,谁 ...

  6. vue当图片加载失败时,用一个默认图片替换;

    原理就是给img绑定error事件,替换原有的src地址. 首先在data中创建一个defaultImg(随便起的),里面的值是该默认图片的地址: 在html页面的img标签上绑定该属性 这样默认图片 ...

  7. Redis学习总结(三)--Redis持久化

    Redis 是将数据存储在内存中的,如果出现断电或系统故障的时候数据就会存在丢失的现象,Redis通过将数据持久化到硬盘中来避免这个问题的出现,我们今天就来学习下 Redis 持久化. Redis 持 ...

  8. 纯css的滑块开关按钮

    之前在项目中使用滑块开关按钮,纯css写的,不考虑兼容低版本浏览器,先说下原理: 使用 checkbox 的 选中 checked 属性改变css 伪类样式, 一定要使用-webkit-appeara ...

  9. kafka消息分发策略分析

    当我们使用kafka向指定Topic发送消息时,如果该Topic具有多个partition,无论消费者有多少,最终都会保证一个partition内的消息只会被一个Consumer group中的一个C ...

  10. HDU dp递推 母牛的故事 *

    母牛的故事 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...