直接上代码:

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. Windows PE变形练手3-把通用模板机器码直接覆盖目标PE

    把通用模板机器码直覆盖目标PE 这个地方真是尝试了好久,遇到很多坑点,Win PE那本书上的东西有点不够,也就直接写书上的例子会发现很多地方不是说的那样,里面提供的信息太少了,就比如里面并没有提被注入 ...

  2. <JVM下篇:性能监控与调优篇>01-概述篇-02-JVM监控及诊断工具-命令行篇

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

  3. Day003 +和字符串使用的问题

    先看一段代码 int a=10; int b=20; System.out.println(""+a+b); System.out.println(a+b+"" ...

  4. 【Spring浅析】一、 BeanFactory 有啥可说的?

    阅读 Spring 源码,BeanFactory 是避不了的存在.而大家常见的使用场景,也是以下形式: ConfigurableApplicationContext ctx = SpringAppli ...

  5. Linux下的ARP攻击-断网

    1.软件工具安装 1. nmap --网络嗅探工具 2. dsniff ( arpspoof )    --ARP嗅探工具 3. net-tools ( ifconfig ) --网络工具 sudo ...

  6. Android面试必问!View 事件分发机制,看这一篇就够了!

    在 Android 开发当中,View 的事件分发机制是一块很重要的知识.不仅在开发当中经常需要用到,面试的时候也经常被问到. 如果你在面试的时候,能把这块讲清楚,对于校招生或者实习生来说,算是一块不 ...

  7. macos python安装mysqlapi集合

    记录一下,接了一个python2 django1.x的项目,很老了导致很多扩展无法安装 os version:macos catalina python version: 2.7.18 而django ...

  8. 交互-通过axios拦截器添加token认证

    通过axios拦截器添加token认证 一.通过axios请求拦截器添加token,保证拥有获取数据的权限 通常访问接口需要相关权限,通常是需要携带token如下所示 那如何在请求头中添加token? ...

  9. [Web] 计算机网络课程(一)

    局域网 覆盖范围小,自己花钱买设备,自己单位维护 线长不超过100米,带宽固定(10M 100M 1000M) 星形结构,上层交换机口少,但每个口带宽高 广域网 距离远 如在家通过ADSL拨号上网,或 ...

  10. 单独跑ltp-20200508 ./runltp

    # cat r3.sh#!/bin/bash # cat r3.sh#!/bin/bashi=1for ((; i<=1000; i++))do/opt/ltp/runltp -s fmtmsg ...