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

数据结构|队列的实现

队列 队列的特性是先进先出。每次数据出去只能的队列的头部,每次数据进来只能加在队列的尾部。 队列实现一般有两种方式,线性队列,链表队列。 链表队列 链表队列的实现可以参考单向链表。...先建立一个普通的单向链表,然后设置三个属性。队列头,用来标识当前队列头的地址;队列尾,用来标识队列尾的地址;队列长,记录当前的队列长,理论上不给队列设置长度可以无限扩展。...每次删除数据,就把队列头的标识移到下一个node的地址。每次增加数据则就把队列尾的指针指向的node加上下一个node的地址,同时把队列尾的标识移过去即可。...线性队列 超简单的,基于数组实现,每次删除数据则把数组第一个删除,把后续的往前面移动,最后一个直接置空;添加数据只需要在最后继续添加即可;数组会有定长,删除和添加数据一定要检验。...下面是一个简单地线性队列。

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

    数据结构----栈和队列之队列的实现

    ; 2.队列组成 (1)队列里面的每一个数据也是有自己的next指针和val数值的,但是我们在实现这个在队尾队头插入数据的时候,这个传入这个队头的指针和队尾的指针,而且是二级指针,为什么要传递二级指针,...; 3.队列的实现 (1)队列的初始化 就是先去断言,然后把这个队列的头尾指针全部置为空指针,节点的个数初始化为0; (2)队列的销毁 使用循环语句,不断的释放每一个节点,最后再让这个phead和ptail...全部置空; (3)队列的尾插 我们知道这个队列里面的数据都是从队尾进入,所以这个push也是从队尾去插入数据,我们需要手动的开辟新的节点空间; 如果这个队列本来就是空的,这个时候队列的头节点和尾结点都是...newnode,否则的话,这个头结点不变,尾结点更新一下就可以了,使用if else实现这个功能; (4)队列的头删 我们的队列里面的数据从头部出来,简称头部删除,我们需要判断这个队列里面的元素的个数...,返回值bool就是0,有数据的话就返回的是1; (6)队列的元素个数 pq->size就是这个队列里面的节点的个数,直接返回即可; (7)返回头部节点 返回头部节点,pq这个队列不可以是空的,而且这个队列的头结点不可以是空的

    5610

    数据结构:队列的顺序存储结构(循环队列)

    队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。是一种先进先出的线性表(FIFO)。允许插入的一端称为队尾,允许删除的一端称为队头。...但大多数程序并不是这样使用队列的,一般情况下出队的元素就不再有保存价值了,这些元素的存储空间应该回收利用,由此想到把队列改造成环形队列(Circular Queue):把queue数组想像成一个圈,front...front追上rear就表示队列空了,如果rear追上front就表示队列的存储空间满了。...的方法实现循环队列。常用的还有 Always keep one slot open....也就是多申请一个不用的元素 位置,那么判断满时  (cb->end + 1) % cb->size == cb->start;  判断空时 cb->end == cb->start; 参考: 《大话数据结构

    1.4K70

    数据结构——循环队列的实现

    之前我们学习过数据结构中的栈和队列,详情可点击这里数据结构——lesson5栈和队列详解进行查看,队列是一种先进先出的结构,但是我们之前讲的队列都是类似于线性的物理结构,这次我们所介绍的队列则是一直类似于环状的循环结构...1.循环队列的介绍 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。...循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。...2.循环队列实现思路分析 首先根据题目要求,队列长度为k,所以一开始我们要使用malloc开辟k个节点的空间,而不是和之前的队列一样在增加数据时再开辟节点,循环队列的长度是固定的,最开始就已经开辟好了...;当然这里土土会将两种方法都写下来,并和大家一起分析两种方法的优劣之处,以便大家选择合适和喜欢的形式(对于顺序表链表有疑问的可以在土土的数据结构专栏里——数据结构学习笔记 进行查看复习哦~) 3.用单链表实现循环队列

    41210

    基于curator的延迟队列

    这里不介绍关于curator的用法及优劣,旨在探究curator对于延迟队列的使用原理 怎么使用 <!...stateChanged(CuratorFramework curatorFramework, ConnectionState connectionState) { } } 是临时节点还是持久化节点,如果基于内存的话客户端或者服务端挂了以后就会存在数据丢失的问题...是否会重新排序,zk是按照请求的时间先后顺序写入的,那么curator是怎么监听到期时间的呢?...zookeeper发现并不会每次请求的时候都会重新排序,也就是说可能在client端进行处理的 以下是在客户端工具上截取的一部分信息,key是由三部分组成的,第一部分固定的queue- , 第二部分暂不确定...; 如果过期时间太长而数据生产的过于频繁的话,那么势必会造成数据的积压对于性能和内存都是很大的考验; 而且是客户端不断的循环获取所有的节点、排序、再处理,由此我们也证明了前面猜想是排序后在服务端重新添加所有节点每次监听第一个节点变化的想法看来是错误的

    35830

    数据结构中的队列 ADT

    队列模型队列的基本操作是Enqueue(入队),它是在表的末端(rear)插入一个元素,还有Dequeue(出队),它是删除(货返回)在表的开头(叫做队头(front))的元素。...下图显示一个队列的抽象模型。?2.队列的数组实现 如同栈的情形一样,对于队列而言任何表的实现都是合法的。像栈一样,对于每一种操作,链表实现和数组实现都给出快速O(1)运行时间。下面讨论队列的数组实现。...对于每一个队列数据结构,保留一个数组Queue[ ]以及位置Front和Rear,它们代表列表的两端。还要记录实际存在与队列中的元素的个数Size。...第一,检测队列是否为空是很重要的,因为当队列为空时一次Dequeue操作将不知不觉 地返回一个不确定的值。第二,某些程序设计人员使用不同的方法来表示队列的队头的队尾。...例如,有些人并不用一个单元来表示队列的大小,因为它们依靠的是基准情形,即当队列为空时Rear = Front -1.队列的大小是通过比较Rear和Front隐式算出的。

    1.4K40

    【数据结构和算法】--队列的特殊结构-循环队列

    循环队列的结构 循环队列是队列的一种特殊结构,它的长度是固定的k,同样是先进先出,理论结构是首尾相连的环形循环结构。其理论结构大致如下: 具体结构描述可以参考LeetCode: 622....设计循环队列的题目要求,大致如下: 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。...循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。...循环队列的实现 循环队列的实现方式同样有两种–数组,链表 数组循环队列: 数组实现方式顾名思义就是动态开辟一个长度为k的数组,那要怎么达到循环呢?...链表循环队列: 链表实现的循环队列更有点循环的味(即将尾指针的next指向头,形成真正的循环),但实现起来不如数组方便。

    14210

    基于顺序表实现队列&&循环队列的处理

    1.假溢出的现象 下面的这个就是我们的假溢出的这个现象的基本的来源: 我们的这个队列里面是有9个位置的,我们知道这个队列里面应该是从后面进队列,从前面出队列,因此这个划去的这个1,2,3就是出队列的,因此我们的这个里面的这个...6个,显然在我们的这个队列的前面是有这个空位置的,但是我们的这个10就是无法插入,在当前的这个数据结构下面; 就比如你去吃饭,餐馆里面是9个桌子,一共只有6个是有人的,但是你进去的时候,小二告诉你这个餐馆满了...push,和我们的这个队列里面的元素的初始化,front表示的就是获取我们的这个队列的首部的元素,pop就是弹出元素,clear相当于就是销毁这个队列,empty就是判断这个队列是不是空的,里面是不是存在元素...,下面的这个就是我们会实现的这些方法; 4.顺序表模拟实现队列 因为我们的这个队列是基于这个顺序标的,所以这个队列实现的过程中会使用到这个顺序表里面的这个相关的方法,需要我们进行人为的这个补充; 下面的这个代码里面使用的是...; 下面的这个就是我们的顺序表里面的相关的操作:首先就是插入元素,本来我们的这个顺序表里面进行这个数据的插入是需要移动元素的,但是我们的这个数据结构是队列,只可能是在这个tail指向的这个位置进行这个数据的插入

    7010

    【数据结构题目】循环队列,以及队列实现栈的模拟

    ️1.循环队列 1.1引言: 接着上期讲解,我们知道在用数组完成队列的模拟时,发现当出队列时会造成空间的浪费,因为头索引无法直接回到前面,就算通过设置到0号索引,但是会出现数组不连续的情况,所以这种情况下...1.3循环队列的下标表示 在表示循环队列下标时,不能简单通过索引加一,如果数组最大索引为7,那么加一就会越界,此时就要通过取余的思想。...,所以当rear=0时就表示队列满了(在不出队列的情况下),然后输出0索引前一个索引即可。...1.2思路: 如上图,我们将要输出的元素,即最后一个元素之前的所以元素传给空队列,然后输出5后,queue1又变成了空队列,然后要输出4就将之前的元素传给queue1,输出4后queue2...size-1个数据传给另一个队列,然后输出队列的唯一一个数据就是栈顶元素。

    7310

    前端中的数据结构——队列篇

    队列是数据结构中的一种,它与实际生活中的排队相似:在一条队伍中,先来的人总是能够先得到服务,后来的人只能排在队伍末尾等候。...实现一个环形队列环形队列具有的属性 首先,在上文中提到的队头、队尾以及容量这三个属性是必不可少的;除此之外,还需要: 队列长度的属性,因为队列的实际长度可能并不会达到队列容量的大小 队列中用来存放元素的数组...如果说队列与 JS 中的哪一种数据类型最相似的话,那数组肯定是最好的答案) 环形队列具有的方法 将元素插入队尾的方法 将队头移出队列的方法 清空队列的方法 判断队列是否已满(如果已满,则不能再插入元素)...我们知道前端中的任务执行就是通过队列的方式进行的,那队列在前端中还能用来干嘛呢?...下面就是一个实际的例子: 通过一个专门用来存放请求的队列,实现请求发起的前后顺序(先进入的先发起)及当前页面中同时发起请求的数量(进入队列的队列在发起的同时移出,请求结束后向队列中添加下一个请求),甚至可以通过队列实现请求的自动发起

    1.1K80

    数据结构中的栈和队列

    引言 数据结构是计算机科学中至关重要的概念之一,它为我们提供了组织和存储数据的方式。在数据结构中,栈(Stack)和队列(Queue)是两个基本而常用的抽象数据类型,它们在解决实际问题中起着重要作用。...栈(Stack) 1.1 栈的定义 栈是一种后进先出(Last In, First Out,LIFO)的数据结构,它的操作只能在一端进行,通常称为栈顶。...队列(Queue) 2.1 队列的定义 队列是一种先进先出(First In, First Out,FIFO)的数据结构,它的操作分别在两端进行,一端进行入队(enqueue),另一端进行出队(dequeue...在队列中,最先进入队列的元素是第一个被移除的,而最后进入队列的元素则是最后被移除的,形成了一种类似于排队等候的结构。 2.2 队列的应用 2.2.1 任务调度 队列在任务调度中是一种常见的数据结构。...结论 栈和队列是计算机科学中常见的数据结构,它们分别在不同的应用场景中发挥着关键作用。深入理解这两种数据结构对于编写高效、清晰的算法是至关重要的。

    38810

    【数据结构】队列的顺序表实现&&收尾栈和队列

    队列的顺序表实现&&收尾栈和队列 1. 队列的概念及结构 2. 队列的实现 Queue.h Queue.c Test.c 3. 栈和队列LeetCode.oj 1....队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列...队列的实现 队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,需要将后面的元素覆盖到前面,复杂度为O(N),效率会比较低。...思路:很明显的是,栈的特点是先进后出,队列的特点是先进先出,那么如何用先进先出的队列实现先进后出的栈呢?...设计循环队列 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。

    48900

    Librdkafka的基础数据结构 1 --- 队列

    Librdkafka用纯C写成,作者在C API基础上作了C++的简单封装; 说到C, 自然里面离不开大量的指针操作, 内存操作, 引用计数等等, 作者一一为我们作了实现; 基础数据结构里面也说到了很多...; tqh_last: 存的是队列里的最后一个元素的 next指针的变量地址, 这个二级指针太有用了,我们后边会再讲到; 队列的entry: #define TAILQ_ENTRY(type) _TAILQ_ENTRY...(struct type,) 实际是用最少侵入式的方式实现了一个类似于C++的模板的机制, 定义中的type就是队列里元素的类型, 可以是任意struct类型, 这个_TAILQ_ENTRY(type,...; tqe_prev: 存的是前一个元素的 next指针的变量地址, 这个二级指针太有用了,我们后边会再讲到; 获队列的最后一个元素#define TAILQ_LAST(head, headname)...((head)->tqh_last))->tqh_last)就是最后一个元素的tqe_prev值, 这个tqe_prev指向的是它前一个元素的next的地址, 解引用后自然就指向队列最后一个元素自己了,

    54920

    在JavaScript中的数据结构(队列)

    队列(Queue)是一种具有先进先出(FIFO, First-In-First-Out)特性的数据结构,它可以用于在计算机程序中管理和存储元素。...新建队列 创建类来表示一个队列,先从最基本的声明类开始: function Queue() { //这里是属性和方法 } 需要一个用于存储队列中元素的数据结构,使用数组,(Queue类和Stack...类非常类似,只是添加和移除元素的原则不同): function Queue() { //用于存储队列中元素的数据结构 let items = []; //这里是属性和方法 } 队列可用的方法...只不过当头尾指针指向向量上界(MAXNUM-1)时,其加1操作的结果是指向向量的下界0。 ---- 优先队列是什么? 优先队列,队列修改版。元素的添加和移除是基于优先级的。...除了入队和出队操作,队列还可以提供其他方法,如peek()返回队列头部的值、isEmpty()判断队列是否为空等等,但其基本实现都是基于入队和出队这两个基本操作。

    30730

    在JavaScript中的数据结构(队列)

    队列(Queue)是一种具有先进先出(FIFO, First-In-First-Out)特性的数据结构,它可以用于在计算机程序中管理和存储元素。...新建队列创建类来表示一个队列,先从最基本的声明类开始:function Queue() { //这里是属性和方法} 需要一个用于存储队列中元素的数据结构,使用数组,(Queue类和Stack类非常类似...,只是添加和移除元素的原则不同):function Queue() { //用于存储队列中元素的数据结构 let items = []; //这里是属性和方法} 队列可用的方法enqueue(element...只不过当头尾指针指向向量上界(MAXNUM-1)时,其加1操作的结果是指向向量的下界0。图片优先队列是什么?优先队列,队列修改版。元素的添加和移除是基于优先级的。...除了入队和出队操作,队列还可以提供其他方法,如peek()返回队列头部的值、isEmpty()判断队列是否为空等等,但其基本实现都是基于入队和出队这两个基本操作。

    29920

    数据结构:队列的链式存储结构

    队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,我们把它简称为链队列。为了操作上的方便,我们将队头指针指向链队列的头节点,而队尾指针指向终端节点。...示例程序:(改变自《大话数据结构》) #include using namespace std; typedef int ElemType; typedef struct Node...;     *pe = p->data;     cout << "Get Head Item : " << *pe << endl;     return true; } /* 插入元素Elem为队列的新的队尾元素...>data = Elem;     s->next = NULL;     Lp->rear->next = s;     Lp->rear = s;     return true; } /*删除队列的队头元素...总的来说,如果可以确定队列的最大值,建议用循环队列,如果不能预估队列的长度,则用链队列。

    1.1K90

    数据结构——队列的讲解(超详细)

    前言: 我们在之前刚讲述完对于栈的讲解,下面我们在讲另一个类似栈的数据结构——队列,它们都是线性表,但结构是大有不同,下面我们直接进入讲解!...正文: 1.队列的概念和结构 1.1.队列的概念 队列和栈一样也是一种线性表,只不过队列和栈是不同的,队列是从一端进入,从另一端出,就有先进先出FIFO的特点,小编之前讲过的栈,是有后进先出的特点,...1.2.队列的结构 如上图所示,队列中,插入数据的那一端,叫做队尾,删除数据的那一端叫做队头,所以队列是两头类型的结构,而栈就是一头(毕竟只可以从一头插入删除数据),以上就是队列的概念和结构,除了这些...2.队列的实现 (基于单链表实现) 首先,队列和栈一样,它们都有两种实现方式,栈的时候我们选择了底层是顺序表的方式,因为栈涉及到了尾插,所以顺序表的时间复杂度比较小,但是队列不一样,队列因为是尾插头删...,所以小编在本篇文章中的队列是用链表(单链表)来实现的,当然,队列也可以用顺序包实现,后面小编会在习题的分享上来告诉各位如何创建的,那么下面正式开启我们的代码之旅~下面是队列所对应的结构体,其中我们要设置一个单链表的结点从而方便表示队列的数据

    45810
    领券