首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

循环队列出队-队列,顺序队列与循环队列

队列   队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。...队列中的数据元素称为队列元素。队列中没有元素时,称为空队列队列只允许在一端插入,另一端删除,所以队列是一种先进先出的线性表。   1. 顺序队列   顺序队列存储模式:一维数组。   ...具体如下图:   由上图可知,随着插入和删除操作,队列元素个数不断变化,队列所占存储空间也在为顺序队列结构多分配的连续空间中移动。当front=rear时,队列中没有任何元素,称为空队列。...规定循环队列中至多能有-1个队列元素(为了区分满队列和空队列),即当循环队列中只剩下一个空存储单元时,队列满。即循环队列为满条件:(rear+1)%=front。   ...循环队列中空队列条件:front=rear。   循环队列就是收尾相接的圆环的抽象。可以简单防止“假上溢”现象循环队列出队,充分利用向量空间,但队列大小是固定的。

73740

队列的基本操作(顺序队列、循环队列、链式队列

队列的基本操作包括: 初始化队列:InitQueue(Q) 操作前提:Q为未初始化的队列。 操作结果:将Q初始化为一个空队列。...采用顺序队列存储的队列称为顺序队列,采用链式存储的队列称为链式队列。顺序队列采用数组存储队列中的元素,使用两个指针尾指针(rear)和头指针(front)分别指向队列的队头和队尾。...使用顺序队列由于在操作时会出现“假溢出现象”,所以可以使用顺序循环队列合理的使用队列空间。...链式队列使用链表来实现,链表中的数据域用来存放队列中的元素,指针域用来存放队列中下一个元素的地址,同时使用队头指针指向队列的第一个元素和最后一个元素。...所以相对于顺序队列和循环队列,链式队列没有判断队列是否为满操作。但在清空队列时需要将队列所有结点的空间动态释放,从而防止内存泄露。测试清空函数可以通过编译器调试来观察。

3.6K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java 模拟队列(一般队列、双端队列、优先级队列)

    队列: 先进先出,处理类似排队的问题,先排的。先处理,后排的等前面的处理完了,再处理 对于插入和移除操作的时间复杂度都为O(1)。...从后面插入,从前面移除 双端队列: 即在队列两端都能够insert和remove:insertLeft、insertRight。...removeLeft、removeRight 含有栈和队列的功能,如去掉insertLeft、removeLeft,那就跟栈一样了。如去掉insertLeft、removeRight。...那就跟队列一样了 一般使用频率较低,时间复杂度 O(1) 优先级队列: 内部维护一个按优先级排序的序列。插入时须要比較查找插入的位置,时间复杂度O(N), 删除O(1) /* * 队列 先进先出。...队列中按优先级排序。

    50020

    队列

    队列和栈一样,是一种特殊的线性表。跟栈不同的是,队列的插入和删除分别在线性表的两端进行,因此,队列是一个先进先出(FIFO)的线性表。...队列是一种先进先出的线性表,而栈是一个后进先出(LIFO)的线性表。 还有一种队列是优先级队列,它的删除操作是按照元素的优先级顺序进行的。...C++标准模库STL的队列是一种用数组描述的队列数据结构,它是从STL的双端队列派生的。 队列在现实种的例子很多,比如: 排队结账。先结完账的人先离开,后结完账的后离开。...* 我们这里的队列为循环队列 * 之所以采用循环队列,是因为如果队列是直线的,队列进行多次增减元素操作之后,整个元素一直 * 向前移动,队列后面会空出来很多空数组,浪费空间。...* 这样队列的每次增减元素操作的时间复杂度为1,效率最高。

    49010

    队列

    队列是一个有序列表,遵循先入先出的原则。即先存入队列的数据,要先取出。后存入的要后取出。可以用数组或是链表来实现。队列最形象的比喻是:公车排队问题,先排队的要先上车,后排队的后上车。...private int rear; // 队列尾 private int[] arr; // 数组用于存放数据,模拟队列 /** * 创建队列的构造器 *...,最大下标是maxSize-1 front = -1; // 指向队列的头部,初始值是-1,每次取出数据的时候先+1 rear = -1; // 指向队列的尾部,初始值为...{ return rear == maxSize - 1; // rear指向队列的尾部,与队列的最大下标(maxSize - 1)相比,相等则是队列已经满了 } /*...* * @param n */ public void addQueue(int n) { if (isFull()) { // 添加数据队列前要判断是是否队列满了

    46020

    队列

    队列:先进先出 队列的基本操作: 入队enqueue(),放一个数据到队列尾部; 出队dequeue(),从队列头部取一个元素; 如下,和栈的对比图: 所以,队列和栈一样,也是一种操作受限的线性表数据结构...注:作为一种非常基础的数据结构,队列的应用广泛,特别是一些具有某些额外特性的队列,比如:循环队列、阻塞队列、并发队列。它们在很多偏底层系统、框架、中间件的开发中,起着关键性作用。...对于顺序队列的实现:队列的实现需要两个指针,一个是head指针,指向队头;一个是tail指针,指向队尾; 2.1 顺序队列 实现如下图: 2.2 链式队列 如下: 2.3 循环队列 用数组实现队列的时候...队列为满的条件是(tail+1)%n=head 2.4 阻塞队列和并发队列 阻塞队列其实就是在队列基础上增加了阻塞操作。 简单来说,就是在队列为空的时候,从队头取数据会被阻塞。...在多线程情况下,会有多个线程同时操作队列,这个时候会有安全问题。那么如何实现一个线程安全的队列呢? 线程安全的队列,叫做并发队列

    50350

    队列

    将稀疏数组和队列拆分成两篇博客。 稀疏数组 因文章不宜篇幅过长,影响阅读体验和目录生成。将稀疏数组和队列拆分成两篇博客。1. 稀疏数组先看一个实际的需求五子棋... 2....队列 案例场景 银行排队的案例 ? 2.1 队列介绍 队列是一个有序列表,可以用数组或是链表来实现。 遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出 。...示意图:(使用数组模拟队列示意图) ? 2.2 数组模拟队列 队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量。...是指向队列头的前一个位置 rear = -1; // 指向队列尾,指向队列尾的数据(即就是队列最后一个数据) } // 判断队列是否满 public boolean...当队列满时,条件是 (rear + 1) % maxSize = front 当队列添加数据时,real必须是 rear = (rear + 1) % maxSize 当队列为空的条件,rear

    49020

    队列实现栈&栈实现队列

    前言 给你两个栈你如何实现一个队列,给你两个队列你如何实现一个栈。 本文就跟大家分享下这两个问题的解决思路与实现过程,欢迎各位感兴趣的开发者阅读本文。...问题分析 我们先来看下栈与队列的特性: 栈:最先加入的元素最后出 队列:最先加入的元素最先出 有关栈与队列的详细讲解请移步我的另一篇文章:数据结构:栈与队列 有了栈与队列的理论基础后,我们就可以利用其特性来分析问题了...接下来,我们来看下如何用队列来实现栈: 同样的,我们的已知条件有两个队列,将这两个队列进行标识:队列1,队列2 执行入栈操作时,将元素放进队列1 执行出栈操作时: 如果队列2为空,我们将队列1中除队首外的元素放进队列...2 如果队列2不为空,我们将队列2的元素放进队列1 队列1元素出队 上述思路中,我们将元素都放入了队列1,出栈时,我们只保留队列1的队首元素,其他元素全部放入了队列2,随后将队列2的元素又放回了队列1,...实现代码 经过上述分析,我们有了实现思路,接下来我们就将上述思路转化为具体的代码,下述代码中将引入我们之前写好的队列与栈的实现代码,对此不了解的开发者请移步我的另外两篇文章:数组实现栈与对象实现栈、队列与双端队列的实现

    64020

    阻塞队列与非阻塞队列

    使用阻塞队列和非阻塞队列的场景还有很多,比较常用的就是我们常说的生产者\消费者模型。 非阻塞队列 ConcurrentLinkedQueue——无界非阻塞队列 ? ?...ConcurrentLinkedQueue主要就是依靠CAS方式实现的线程安全的队列,而且没有队列长度的限制,向队列添加元素会放到队尾,从队列获取元素会从队首,遵循FIFO原则。...阻塞队列 Java提供了一个阻塞队列的接口——BlockingQueue,在队列的基础上增加可阻塞添加元素和可阻塞获取元素的方法。 ? ?...;出队不仅需要唤醒满队列时入队阻塞的线程,还需要唤醒空队列出队的线程。...双端阻塞队列适用于工作密取模式,工作密取也是一种生产者\消费者模型,每个消费者都有自己的双端队列,当自己的队列完成之后,会从其他消费者的双端队列的尾部(正常消费是从队列的头部)进行消费,这样减少竞争关系

    3.1K30

    线性表--顺序队列 循环队列 双端队列(十三)

    队列中没有元素时,称为空队列。 2.队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。...因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。 ?...除了栈和队列,还有一种限定性数据结构是双端队列,双端队列是限定插入和删除操作在表的两端进行的线性表。这两端分别称做端点1和端点2。也可像栈一样,可以用一个铁道转轨网络来比喻双端队列。...在实际使用中,还可以有输出受限的双端队列(即一个端点允许插入和删除,另一个端点只允许插入的双端队列)和输入受限的双端队列(即一个端点允许插入和删除,另一个端点只允许删除的双端队列)。...而如果限定双端队列从某个端点插入的元素只能从该端点删除,则该双端队列就蜕变为两个栈底相邻的栈了。这种双端队列看起来比栈和队列更灵活,但是实际应用中远不及栈和队列常用,就不在讨论。

    77920
    领券