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 ...
随机推荐
- 智能家居系列之——WIFI小车
2017年准备搬新家了,一直关注着树莓派的论坛,看有没有新玩意,想着今年过年在杭州过年,头一次在城里过年,感觉特别无聊,没有麻将可以打,没有鞭炮可以放,只能在家做做小玩意.从小就对四驱车有兴趣,一直想 ...
- jqGrid根据数据动态设置rowList
superme.rowList = [10,20,50,100]; superme.rowNum = 20; 全局属性 loadComplete : function (data) { if(data ...
- 从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布
一.前言 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件.Jenkins 支持各种运行方式,可通过系统包.Docker 或者通过一个独立的 Java ...
- Jedis操作Redis--SortedSet类型
/** * SortedSet(有序集合) * ZADD,ZCARD,ZCOUNT,ZINCRBY,ZRANGE,ZRANGEBYSCORE,ZRANK,ZREM,ZREMRANGEBYRANK,ZR ...
- Prim算法、Kruskal算法、Dijkstra算法
无向加权图 1.生成树(minimum spanning trees) 图的生成树是它一棵含有所有顶点的无环联通子图 最小生成树:生成树中权值和最小的(所有边的权值之和) Prim算法.Kruskal ...
- chrome取消安全模式
右键快捷方式,后面添加--disable-web-security --user-data-dir=E:\MyChromeDevUserData "D:\Program Files (x86 ...
- hihocoder [Offer收割]编程练习赛18 C 最美和弦(dp)
题目链接:http://hihocoder.com/problemset/problem/1532 题解:一道基础的dp,设dp[i][j][k][l]表示处理到第几个数,当前是哪个和弦错了几次初始x ...
- 关于Math常用的方法
1. 常用的Math用法 Math.random() //0-1 的随机数 Math.round() //四舍五入取整 Math.ceil() //向上取整 Math.floor() //向下取整 M ...
- Node基础-CommonJS模块化规范
1.在本地项目中基于NPM/YARN安装第三方模块 第一步:在本地项目中创建一个"package.json"的文件 作用:把当前项目所有依赖的第三方模块信息(包含:模块名称以及版本 ...
- JS-特效 ~ 01. 事件对象、offset偏移/检测、无缝滚动、自动循环轮播图
Math.round ( ) :正书四舍五入,负数五舍六入 用定时器,先清除定时器 事件对象 event event:事件被触动时,鼠标和键盘的状态,通过属性控制 Offset:偏移,检测 1. 获取 ...