直接上代码:

public class CircleArrayQueueLvcai {
private int[] array;
private int maxSize;//循环队列大小
private int front; // 队列头, 这里约定初始值为0,
private int rear ; //队列尾,初始值为0, 这里约定为 队列中最后一位元素的下一个位置(这样约定,意味着该队列的存储容量为 maxSize-1) //构造
public CircleArrayQueueLvcai(int size){
maxSize = size;
array = new int[size];
}
//是否满
public boolean isFull(){
return (rear+1) % maxSize == front; //rear+1 = maxSize 此时对maxSize取模式 结果为0
}
//是否空
public boolean isEmpty(){
return rear == front; //队列尾 = 队列头 = 0 就为空
} //添加数据
public String add(int num) throws Exception {
//判断是否满
if(isFull()){
throw new Exception("circle Queue is full, you can set num is "+(maxSize-1));
} array[rear] = num;
//rear++; 这样写不对,, 因为是循环队列,,队列添加满后,,rear自动变为0, 重新开始
rear = (rear+1) % maxSize;
return "add success";
} //出队列
public int push() throws Exception {
//判断是否为空
if(isEmpty()){
throw new Exception("circle array is empty");
}
int resultNum = array[front];
//不能这样写 front++; 循环队列, 要让front 队列头加满后, 自动变为0
front = (front+1) % maxSize;
return resultNum;
} //show circle queue
public void show(){
//是否为空
if(isEmpty()){
System.out.println(" circle queue is empty");
}
//从front开始遍历到 有效数据
for(int i=front; i<front+getAliveNum(); i++){
System.out.print(array[i]+" ");
}
System.out.println();
}
//获取 循环队列有效数据
public int getAliveNum(){
//获取队列的有效数据: (rear+maxSize-front)%maxSize , 当rear为最后一个元素的下一个位置时,这个公式是成立的
return (rear+maxSize-front)%maxSize;
} public static void main(String[] args) throws Exception {
//创建循环队列, 容量为4
CircleArrayQueueLvcai circle = new CircleArrayQueueLvcai(5);
circle.add(1);
circle.add(2);
circle.add(3);
circle.add(4);
circle.add(4);//这样的循环队列 能存的元素的大小为 size-1
circle.show();
//出队列
//circle.push();
//circle.push();
//circle.push();
//circle.show();
}

}

测试结果:

  public static void main(String[] args) throws Exception {
//创建循环队列, 容量为4
CircleArrayQueueLvcai circle = new CircleArrayQueueLvcai(5);
circle.add(1);
circle.add(2);
circle.add(3);
circle.add(4);
//circle.add(4);//这样的循环队列 能存的元素的大小为 size-1
circle.show();
//出队列
circle.push();
//circle.push();
//circle.push();
circle.show();
}

结果为:

  public static void main(String[] args) throws Exception {
//创建循环队列, 容量为4
CircleArrayQueueLvcai circle = new CircleArrayQueueLvcai(5);
circle.add(1);
circle.add(2);
circle.add(3);
circle.add(4);
//circle.add(4);//这样的循环队列 能存的元素的大小为 size-1
circle.show();
//出队列
circle.push();
circle.push();
//circle.push();
circle.show();
}

结果为:

1、java数据结构和算法---循环队列的更多相关文章

  1. Java数据结构和算法(五)——队列

    队列.queue,就是现实生活中的排队. 1.简单队列: public class Queqe { private int array[]; private int front; private in ...

  2. Java数据结构和算法(二)--队列

    上一篇文章写了栈的相关知识,而本文会讲一下队列 队列是一种特殊的线性表,在尾部插入(入队Enqueue),从头部删除(出队Dequeue),和栈的特性相反,存取数据特点是:FIFO Java中queu ...

  3. 【Java数据结构学习笔记之二】Java数据结构与算法之队列(Queue)实现

      本篇是数据结构与算法的第三篇,本篇我们将来了解一下知识点: 队列的抽象数据类型 顺序队列的设计与实现 链式队列的设计与实现 队列应用的简单举例 优先队列的设置与实现双链表实现 队列的抽象数据类型 ...

  4. 【Java数据结构学习笔记之三】Java数据结构与算法之队列(Queue)实现

      本篇是数据结构与算法的第三篇,本篇我们将来了解一下知识点: 队列的抽象数据类型 顺序队列的设计与实现 链式队列的设计与实现 队列应用的简单举例 优先队列的设置与实现双链表实现 队列的抽象数据类型 ...

  5. Java数据结构与算法(3):队列

    队列也是一种表,不同的是队列在一端进行插入而在另一端进行删除. 队列模型 队列的基本操作包括入队.出队操作.在表的末端插入元素,在表的开头删除元素,即先进先出(FIFO). 队列的数组实现 对于每一个 ...

  6. Java数据结构和算法 - 栈和队列

    Q: 栈.队列与数组的区别? A: 本篇主要涉及三种数据存储类型:栈.队列和优先级队列,它与数组主要有如下三个区别: A: (一)程序员工具 数组和其他的结构(栈.队列.链表.树等等)都适用于数据库应 ...

  7. Java数据结构和算法(六)——前缀、中缀、后缀表达式

    前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...

  8. Java数据结构和算法 - 堆

    堆的介绍 Q: 什么是堆? A: 这里的“堆”是指一种特殊的二叉树,不要和Java.C/C++等编程语言里的“堆”混淆,后者指的是程序员用new能得到的计算机内存的可用部分 A: 堆是有如下特点的二叉 ...

  9. Java数据结构和算法 - 二叉树

    前言 数据结构可划分为线性结构.树型结构和图型结构三大类.前面几篇讨论了数组.栈和队列.链表都是线性结构.树型结构中每个结点只允许有一个直接前驱结点,但允许有一个以上直接后驱结点.树型结构有树和二叉树 ...

随机推荐

  1. DVWA之CSRF(跨站请求伪造攻击)

    目录 Low Middle High Impossible Low 源代码: <?php if( isset( $_GET[ 'Change' ] ) ) { // Get input $pas ...

  2. 逆向与分析-WebBrowserPassView消息分析

    逆向与分析-WebBrowserPassView消息分析 这个的源头是之前我写的一个博客: http://blog.csdn.net/u013761036/article/details/730427 ...

  3. <JVM中篇:字节码与类的加载篇>03-类的加载过程(类的生命周期)详解

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  4. 阿里面试官用HashMap把我问倒了

    本人是一名大三学生,最近在找暑期实习,其中也面试过两次阿里,一次菜鸟网络部门.一次网商银行部门,当然我都失败了,同时也让我印象很深刻,因此记录了其中一些面试心得,我觉得这个问题很值得分享,因此分享给大 ...

  5. Spring的安装

    Spring的安装 Spring框架包 spring-framework-4.3.6RELEASE-dist.zip http://repo.spring.io/simple/libs-release ...

  6. python双曲线拟合

    待拟合函数 y = alpha * pow(x, beta) 输入: x数组,y数组 输出: alpha,beta,相关系数R2 from scipy.optimize import leastsq ...

  7. Spring 中使用了那些设计模式呢?

    一. Spring 中常见的设计模式 工厂模式 : BeanFactory 装饰器模式: BeanWrapper 代理模式: AopProxy 单例模式: ApplicationContext 委派模 ...

  8. 3D教育类小图标_三维立体学习类icon图标素材

    3D教育类小图标_三维立体学习类icon图标素材

  9. .Net Core——用代码写代码?

    想要用代码写代码,肯定是绕不开反射的.反射的概念相比都不陌生,只是应用多少就因人而异,今天分享一个代码生成器的思路,仅供参考,不要过分依赖哦. 思路分析 众所周知,利用反射可以在程序运行时获取到任一对 ...

  10. PHPcms v9.6.0 文件上传漏洞

    title: PHPcms v9.6.0 文件上传漏洞 date: 2021-4-5 tags: 渗透测试,CVE漏洞复现,文件上传 categories: 渗透测试 CVE漏洞复现 文件上传 PHP ...