热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

一文搞懂循环队列的不同配置问题

本文主要详细讲解了数据结构中循环队列在3种不同配置下所延申出来的一些问题,而对于链式队列则没什么好说的。注意本文所说的配置是指:什么时候是队空状态,什么时候是队满状态,入队操作怎么




本文主要详细讲解了数据结构中循环队列在3种不同配置下所延申出来的一些问题,而对于链式队列则没什么好说的。


注意本文所说的配置是指:什么时候是队空状态,什么时候是队满状态,入队操作怎么执行,出队操作怎么执行。它们在不同的规定下会体现出不同的形式,这些不同的形式就是队列的配置了。

文章目录

    • 一、正常配置
          • 队空状态:
          • 入队操作:
          • 出队操作:
          • 队满状态:
          • 计算当前队列中元素个数问题:
    • 二、非正常配置1
          • 队空状态:
          • 入队操作:
          • 出队操作:
          • 队满状态:
          • 计算当前队列中元素个数问题:
    • 二、非正常配置2
          • 队空状态:
          • 入队操作:
          • 出队操作:
          • 队满状态:
          • 计算当前队列中元素个数问题:



一、正常配置

正常配置:先移指针,后看数据


队空状态:

在这里插入图片描述


入队操作:

rear先后移一位,然后把数据赋值给rear所指的存储单元。

在这里插入图片描述


出队操作:

front先后移一位,然后取front所指存储单元中的元素。

在这里插入图片描述


队满状态:

我们需要空出一个位置来区分队空和队满这两个状态。

front指向队头元素的前一个位置,rear指向队尾元素。

在这里插入图片描述


计算当前队列中元素个数问题:

在这里插入图片描述

上图当rear(rear+1)+(maxSize-1-front)




二、非正常配置1


队空状态:

在这里插入图片描述


入队操作:

把数据赋值给rear所指的存储单元,然后rear后移一位(先入队元素,再移动指针,和正常配置相反)。

在这里插入图片描述


出队操作:

先取front所指存储单元中的元素,然后front后移一位(和正常配置相反)。

在这里插入图片描述


队满状态:

我们需要空出一个位置来区分队空和队满这两个状态。

front指向队头元素,rear指向队尾元素的后一个位置。

在这里插入图片描述


计算当前队列中元素个数问题:

在这里插入图片描述

上图当rearrear+(maxSize-front)




二、非正常配置2


队空状态:

此非正常配置的队空条件和正常配置的队满条件一样。

在这里插入图片描述


入队操作:

下图先移动指针,当然也可以先入队元素,再移动指针。

在这里插入图片描述


出队操作:

先取front所指存储单元中的元素,然后front后移一位。

在这里插入图片描述


队满状态:

我们需要空出一个位置来区分队空和队满这两个状态。

front指向队头元素,rear指向队尾元素。

在这里插入图片描述


计算当前队列中元素个数问题:

在这里插入图片描述

上图当rear(rear+1)+(maxSize-front)

本配置中rear和front都指向了元素而不同于上面的配置有一个指向空




推荐阅读
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 006_Redis的List数据类型
    1.List类型是一个链表结构的集合,主要功能有push,pop,获取元素等。List类型是一个双端链表的结构,我们可以通过相关操作进行集合的头部或者尾部添加删除元素,List的设 ... [详细]
  • Linux的uucico命令使用方法及工作模式介绍
    本文介绍了Linux的uucico命令的使用方法和工作模式,包括主动模式和附属模式。uucico是用来处理uucp或uux送到队列的文件传输工具,具有操作简单快捷、实用性强的特点。文章还介绍了uucico命令的参数及其说明,包括-c或--quiet、-C或--ifwork、-D或--nodetach、-e或--loop、-f或--force、-i或--stdin、-I--config、-l或--prompt等。通过本文的学习,读者可以更好地掌握Linux的uucico命令的使用方法。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 一、什么是闭包?有什么作用什么是闭包闭包是定义在一个函数内部的函数,它可以访问父级函数的内部变量。当一个闭包被创建时,会关联一个作用域—— ... [详细]
  • 本文讨论了读书的目的以及学习算法的重要性,并介绍了两个算法:除法速算和约瑟夫环的数学算法。同时,通过具体的例子和推理,解释了为什么x=x+k序列中的第一个人的位置为k,以及序列2和序列3的关系。通过学习算法,可以提高思维能力和解决问题的能力。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • 模块化区块链生态系统的优势概述及其应用案例
    本文介绍了相较于单体区块链,模块化区块链生态系统的优势,并以Celestia、Dymension和Fuel等模块化区块链项目为例,探讨了它们解决可扩展性和部署问题的方案。模块化区块链架构提高了区块链的可扩展性和吞吐量,并提供了跨链互操作性和主权可扩展性。开发人员可以根据需要选择执行环境,并获得奖学金支持。该文对模块化区块链的应用案例进行了介绍,展示了其在区块链领域的潜力和前景。 ... [详细]
  • 本文介绍了一道经典的状态压缩题目——关灯问题2,并提供了解决该问题的算法思路。通过使用二进制表示灯的状态,并枚举所有可能的状态,可以求解出最少按按钮的次数,从而将所有灯关掉。本文还对状压和位运算进行了解释,并指出了该方法的适用性和局限性。 ... [详细]
  • BZOJ1233 干草堆单调队列优化DP
    本文介绍了一个关于干草堆摆放的问题,通过使用单调队列来优化DP算法,求解最多可以叠几层干草堆。具体的解题思路和转移方程在文章中进行了详细说明,并给出了相应的代码示例。 ... [详细]
  • crontab 自动执行定时任务时,命令无法执行的解决方案
    为什么80%的码农都做不了架构师?最近在工作中需要使用crontab执行定时任务,处理memcacheq消息队列里的数据,但是发现在 ... [详细]
author-avatar
好学的程序员
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有