首页 > 其他分享 >一篇文章搞懂并设计循环队列

一篇文章搞懂并设计循环队列

时间:2024-03-24 20:31:29浏览次数:26  
标签:return 一篇 队列 元素 front 搞懂 rear size

目录

1.为什么使用循环队列

2. 循环队列组成

为什么要只使用size-1 个空间存储?

3.循环队列的元素进出

3.1 队尾加入元素

3.2 队头删除元素

3.3 取出队头元素

3.4 取出队尾元素


1.为什么使用循环队列

“假溢出”——》 出队列会空出存储空间,无法再次利用

如图: 索引为0和1的空间被浪费

2. 循环队列组成

有界顺序队列+索引值反复利用

front :一个“头指针”,其实就是个索引值,代表队头的位置

rear: 一个“为指针” ,其实就是个索引值,代表(队尾+1)的位置

max_size:   整个队列的最大容量 -》“有界”

为什么要只使用size-1 个空间存储?

区分队空和队满

队满 isFull()  只需  (rear+1)%max_size ==  front

队空 isEmpty() 只需  rear == front 

3.循环队列的元素进出

3.1 队尾加入元素

先判断队列非满,再更新rear索引

 public boolean enQueue(int value) {
        if (isFull()) {
            return false;
        }
        data[rear] = value;
        rear = (rear + 1) % size;
        return true;
    }

3.2 队头删除元素

先判断队列非空,再更新front索引

    public boolean deQueue() {
        if (isEmpty()) {
            return false;
        }
        front = (front + 1) % size;
        return true;
    }

3.3 取出队头元素

先判断非空,再通过front直接找到

    public int Front() {
        if (isEmpty()) {
            return -1;
        }
        return data[front];
    }

3.4 取出队尾元素

先判断非空,再通过(rear-1+max_size)%size 找到

    public int Rear() {
        if (isEmpty()) {
            return -1;
        }
        return data[(rear - 1 + size) % size];
    }

标签:return,一篇,队列,元素,front,搞懂,rear,size
From: https://blog.csdn.net/m0_74837900/article/details/136988536

相关文章

  • JAVAEE——多线程的设计模式,生产消费模型,阻塞队列
    文章目录多线程设计模式什么是设计模式单例模式饿汉模式懒汉模式线程安全问题懒汉模式就一定安全吗?锁引发的效率问题jvm的优化引起的安全问题阻塞队列阻塞队列是什么?生产消费者模型阻塞队列实现消费生产者模型可能遇到的异常多线程设计模式什么是设计模式首先我......
  • 一文彻底搞懂MySQL索引
    文章目录1.索引的优缺点2.创建索引准则3.索引的分类4.索引实现5.操作索引1.索引的优缺点MySQL索引是一种数据结构,用于提高数据库查询效率。它可以快速定位到表中符合特定条件的数据行,从而加快查询速度。索引通常是根据表中的一个或多个字段创建的,它们存储了对......
  • Golang:无锁队列实现
    无锁队列实现无锁队列实现参考论文适用场景并发条件下,需要使用到队列的情况,都可以使用无锁队列技术要点使用atomic.loadpointer来实现实时的指针相等判断使用CAS来替代同步状态下的p=p.next额外判断tail是不是正确的tail,并且不断地尝试推后他示例代码pack......
  • 3分钟搞懂示波器测原副边波形
    大家好,我是砖一。今天分享一下如何用示波器测试原副边的波形,验证电源设计规格准确性。一,试验目的假设我们现在拿到的样品是属于开关电源类型的。1,我们对于电源工程师设计出的一个开关电源样品测试原副边波形,其实就是测试该样品的输入输出波形。2,我们是使用示波器对开关电......
  • Python数据结构实验 队列的实现
    一、实验目的1.掌握用Python定义队列的顺序存储结构和链式存储结构,以便在实际背景下灵活运用;2.掌握队列的特点,即先进先出的原则;3.掌握队列的基本操作实现方法。二、实验环境1.Windows操作系统的计算机2.Python3.7环境平台和PyCharm编辑器三、实验说明 1.实现队列的顺序存......
  • 【Virtuoso环境设置第一篇】.cdsenv
    Virtuoso的环境你真的懂吗?这是环境系列的第一篇,教大家如何理解Virtuoso环境中.cdsenv的加载机制关于.cdsenv的默认加载顺序是什么?在查阅官方文档后,可以得到的结论是:第一顺位是所有已注册的软件工具的定制化.cdsenv,这些文件的位置如下:your_install_dir/tools/dfII/etc/tools/......
  • 一文彻底搞懂HashMap
    文章目录1.数据结构2.扩容机制3.常问问题3.1HashMap为什么要树化3.2链表中转红黑树的阈值为什么设为81.数据结构JDK7中的HashMap使⽤的是数组+链表的实现⽅式,即拉链法。当发生哈希冲突时,即多个键映射到同一个数组索引位置时,HashMap会将这些键值对存储在......
  • 【消息队列开发】 实现 VirtualHostTests 类——测试虚拟主机操作
    文章目录......
  • 一篇搞定ECharts的基本使用,赶快收藏起来学习吧~
    准备工作引入声明一个有宽高的dDOM元素echarts.init(DOM)option配置对象echarts.setOptions(option)基础配置option类似于一个容器,那么里面的属性就相当于组件:xAxis(直角坐标系X轴)、yAxis(直角坐标系Y轴)、grid(直角坐标系底板)、angleAxis(极坐标系角度轴)、radiusAxi......
  • 【模板】单调队列 滑动窗口最值
    LuoguP1886滑动队列/单调队列有一个长为 n 的序列 a,以及一个大小为 k 的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。 以求最小值为例f[i]表示以i结尾的窗口中的最小值f[i]=min(a[j]),i-k+1<=j<=i暴力算法O(n^2)......