循环队列


比较简单,循环队列主要是判断队满、队空、有效元素个数

画图说明:


假设:队的长度为5(0-4)

但是实际maxsize为6,需要一个预留空间(不存储元素)做计算



继续添加3个元素后:



出队一个元素



下面是完整循环队列代码demo:

public class CircleArrayQueueDemo {
private int maxSize;
private int front;
private int rear;
private int[] arr; public static void main(String[] args) {
CircleArrayQueueDemo caq = new CircleArrayQueueDemo(4);
caq.addQueue(10);
caq.addQueue(20);
caq.addQueue(30);
caq.addQueue(40);
System.out.println("加入10,20,30,40");
caq.showQueue();
System.out.println("出队,此时队里还剩下:");
caq.getQueue();
caq.showQueue();
System.out.println("出队,此时队里还剩下:");
caq.getQueue();
caq.showQueue();
System.out.println("出队,此时队里还剩下:");
caq.getQueue();
caq.showQueue();
System.out.println("加入10,20,30,40");
caq.addQueue(10);
caq.addQueue(20);
caq.addQueue(30);
caq.addQueue(40);
caq.showQueue();
} public CircleArrayQueueDemo(int maxSize) {
this.maxSize = maxSize+1;
arr = new int[maxSize+1];
} public boolean isFull() {
return (rear + 1) % maxSize == front;//队满条件
} public boolean isEmpty() {
return rear == front;//队空条件
} public void addQueue(int data) {
if (isFull()) {
System.out.println("队已满,不能加入");
return;
}
arr[rear] = data;
rear = (rear + 1) % maxSize;//取模运算防止越界,以及循环作用
} public int getQueue() {
if (isEmpty()) {
throw new RuntimeException("队为空,不能取数据");
}
int tmp = arr[front];
front = (front+1) % maxSize;//取模运算防止越界,以及循环作用
return tmp;
} public void showQueue() {
if (isEmpty()) {
System.out.println("队为空");
}
     //从队首遍历,假设队头在index为1的位置,(size+front)-front=size,总数不变
for (int i = front; i < front + size(); i++) {
       //取模防止越界与起循环作用
System.out.printf("arr[%d]=%d\n", i % maxSize, arr[i % maxSize]);
}
} public int size() {
return (rear + maxSize - front) % maxSize;//有效元素的数量
}
}

数据结构之循环队列Demo的更多相关文章

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

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

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

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

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

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

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

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

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

    "Queue.h" #include "Queue.h" #include <stdio.h> #include <stdlib.h> ...

  6. C_数据结构_循环队列

    # include <stdio.h> # include <malloc.h> typedef struct Queue { int * pBase; int front; ...

  7. 数据结构算法C语言实现(十二)--- 3.4循环队列&队列的顺序表示和实现

    一.简述 空队列的处理方法:1.另设一个标志位以区别队列是空还是满:2.少用一个元素空间,约定以队列头指针在队尾指针下一位置上作为队列呈满的状态的标志. 二.头文件 //3_4_part1.h /** ...

  8. [置顶] ※数据结构※→☆线性表结构(queue)☆============循环队列 顺序存储结构(queue circular sequence)(十)

    循环队列 为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量.存储在其中的队列称为循环队列(Circular Queue). ...

  9. JavaScript数据结构与算法(四) 循环队列的实现

    实现击鼓传花,需要用到上一章所述队列类Queue TypeScript方式实现源码 let hotPotato = (nameList, num) => { let queue = new Qu ...

随机推荐

  1. django身份认证、权限认证、频率校验使用及源码分析

    一. 身份认证源码分析 1.1 APIView源码的分析 APIView源码之前分析过https://www.cnblogs.com/maoruqiang/p/11135335.html,里面主要将r ...

  2. Selenium系列(十四) - Web UI 自动化基础实战(1)

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  3. 分享一款一直在维护的【网络开发运维|通用调试工具】: http请求, websocket,cmd, RSA,DES, 参数签名工具,脚本批量生成工具,google动态口令,端口检测,组件注册,js混淆...

    首先发下下载地址:https://files.cnblogs.com/files/taohuadaozhu/ConfigLab.Test.ex.rar 日常开发,运维,跨部门跨公司对接中.  想快速调 ...

  4. 200行PYTHON代码实现贪吃蛇

    200行Python代码实现贪吃蛇 话不多说,最后会给出全部的代码,也可以从这里Fork,正文开始: 目前实现的功能列表: 贪吃蛇的控制,通过上下左右方向键: 触碰到边缘.墙壁.自身则游戏结束: 接触 ...

  5. lly的数列询问(最小生成树 + 思维)

    lly的数列询问 Description 这个问题很简单,lly lly lly给你一些提示,让你试着确定长度为n n n的数列A [1] A [2] ... A [n]的值,但是他想尽一切办法为大家 ...

  6. MetaQNN : 与Google同场竞技,MIT提出基于Q-Learning的神经网络搜索 | ICLR 2017

    论文提出MetaQNN,基于Q-Learning的神经网络架构搜索,将优化视觉缩小到单层上,相对于Google Brain的NAS方法着眼与整个网络进行优化,虽然准确率差了2-3%,但搜索过程要简单地 ...

  7. jenkins登录信息无效,忘记密码

    1.使用admin账号登陆jenkins,提示登录信息无效,请重试 原因:启动了多个jenkins服务或者所开的Jenkins服务不对 2.jenkins账号密码忘记 修改C:\Users\ASUS- ...

  8. 1013 Battle Over Cities (25 分)

    It is vitally important to have all the cities connected by highways in a war. If a city is occupied ...

  9. 曹工说Redis源码(2)-- redis server 启动过程解析及简单c语言基础知识补充

    文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...

  10. JMeter 接口测试 自动生成签名机制

    在进行接口测试时,遇到接口进行了签名校验,为实现自动生成签名,经过一点研究终于成功. 首先,需要从前端获取 签名加密包  XXXsign.jar..  建议将该jar包放在 jmeter lib 目录 ...