循环队列的java结构_java数据结构——队列、循环队列(Queue)

这篇博客介绍了Java中如何实现队列和循环队列的数据结构,包括队列的基本操作如入队、出队、队满和队空的判断。文章通过示例代码展示了如何避免队列溢出问题,探讨了循环队列在超出最大长度时仍能正常工作的机制。此外,还提供了一个简单的主函数来演示队列的使用和先进先出的特性。
摘要由CSDN通过智能技术生成

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

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】 大话数据结构(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 ...

Java数据结构——双端队列

双端队列(Deque)双端队列是指允许两端都可以进行入队和出队操作的队列,其元素的逻辑结构仍是线性结构.将队列的两端分别称为前端和后端,两端都可以入队和出队.Deque继承自Queue接口,Deque ...

【数据结构】循环队列 C语言实现

"Queue.h" #include "Queue.h" #include #include ...

随机推荐

CSS-border属性制作小三角

1--三角向上下左上.右上.右下.左下这四个方向突出的样式 向左上角突出: border-color: transparent transparent transparent #FFCC00; bor ...

C#类型转换运算符之 explicit implicit

类型转换运算符 explicit和implicit用于声明用户定义的类型转换运算符,如果可以确保转换过程不会造成数据丢失,则可使用这两个关键字在用户定义的类型和其他类型之间进行转换. explicit ...

11款样式新颖的 jQuery/CSS3 网页菜单

今天为大家准备了11款样式风格挺不错的jQuery/CSS3网页菜单,主要包括面包屑菜单.下拉菜单.Tab菜单等,喜欢的朋友赶紧收藏,一起来看看这些菜单. 1.jQuery / CSS3多功能下拉菜单 ...

轻量级的.Net ORM框架介绍

轻量型 ORM 组件 FluentData 官网https://fluentdata.codeplex.com/ http://www.cnblogs.com/babietongtianta/p/43 ...

Android清单文件AndroidMenifest.xml

1.AndroidMenifes.xml清单文主要结构件结构 所谓主要结构就是每一个清单文件中都必不可少的结构主要是下面三层 第一层.menifest 第二层.application,use-sdk ...

移动前端不得不了解的HTML5 head 头标签(中上篇)

Meta 标签 meta标签是HTML中head头部的一个辅助性标签,它位于HTML文档头部的

和 标记之间,它提供用户不可见的信息.虽然这部分信 ...

TOJ 数据结构实验--静态顺序栈

描述 创建一个顺序栈(静态),栈大小为5.能够完成栈的初始化.入栈.出栈.获取栈顶元素.销毁栈等操作. 顺序栈类型定义如下: typedef struct {  int data[Max];    i ...

python的学习笔记__初识函数

函数定义与调用 #函数定义 def mylen(): """计算s1的长度""" s1 = "hello world" ...

国内第一本cbuilder开发web的宝典震撼登场(delphi也可参考)

uniGUI入门到精通cBuilder版 众所周知,cbuilder和delphi是曾经风靡多年的强悍的万能的开发工具,岂奈大浪淘沙,B/S时代的到来让这对孪生兄弟隐姓埋名.然,无数风流人物依然对他们 ...

Maven Tomcat7+ 实现自动化部署

首先在Tomcat里配置deploy的用户(tomcat根目录/conf/tomcat-users.xml): &l ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值