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

数据结构-队列

1.队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列...:进行删除操作的一端称为队头. 2.队列的实现 队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。...2.1定义队列 多个值我们使用两个结构体来封装,方便找头和尾。...void QueueInit(Que* pq) { assert(pq); pq->size = 0; pq->head = pq->tail = NULL; } 2.3销毁队列 销毁队列需要遍历...队列是先入先出,所以数据是从头节点出去,使用断言此队列不为空,在判断是不是只有一个节点,如果是就直接free掉这个节点即可,再将tai和head置空。

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

    数据结构队列

    队列OJ题 用队列实现栈 一个队列实现栈 用栈实现队列 设计循环队列 队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First...In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 队列的实现 队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构...,出队列在数组头上出数据,效率会比较低 话不多说,我们直接来实现队列:(一定要记得自己去实现一个队列) 1.队列的结构 队列的初始化是比较简单的:由单链表构成,一个结构体为队列的结点,但是只有一个指针...循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。...在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。

    38020

    数据结构-队列

    队列的定义 在很多资料中,队列与栈往往一同出现,因为它与栈有很多相似的地方。...队列是只允许在一端插入另一端删除的线性表,即一种先入先出(FIFO)的结构,队列有顺序对列与循环队列,循环队列主要是为了弥补队列存储空间不足与“假溢出”的问题,所以在实际应用时,往往使用的是循环队列,下面我们从头说下为什么会有循环队列这个东西...一般解决这个问题可以采用两种办法: 1.设立标志位,flag=0为空队列,flag=1为满队列。 2.故意留出一个位置,比如6个位置的数组,当填满5个时即认为满队列 ?...所在在链队列中就不需要循环队列了。...当然这是一篇技术博客,个人的喜欢不应该出现在这里,只能很客观的说:在可以确定队列长度最大值的情况下,建议使用循环队列;在无法估计长度的情况下,使用链队列

    56760

    数据结构-队列

    数据结构-队列 定义 队列(queue)在计算机科学中,是一种先进先出的线性表。 它只允许在表的前端进行删除操作,而在表的后端进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。...队列中没有元素时,称为空队列。...* 2.用ret变量来接受当前队列头的值 * 3.接收成功之后将,队列头元素置空 * 4.front指针指向下一个元素 * 5.size大小-1 *...循环队列 循环队列中有两个新词,两个指针 front 指向队列的第一个元素,初始指向0 tail 指向队列的最后一个元素的后一个位置,初始指向0 什么是循环队列 ?...* 2.用ret变量来接受当前队列头的值 * 3.接收成功之后将,队列头元素置空 * 4.front指针指向下一个元素 * 5.size大小-1 *

    28030

    队列数据结构

    队列 队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾...出队列:进行删除操作的一端称为队头 队列的实现 队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。...; // 队列的结构 typedef struct Queue { QNode* _front; QNode* _rear; }Queue; // 初始化队列 void...QueueInit(Queue* q); // 队尾入队列 void QueuePush(Queue* q, QDataType data); // 队头出队列 void QueuePop...(Queue* q); // 获取队列头部元素 QDataType QueueFront(Queue* q); // 获取队列队尾元素 QDataType QueueBack(Queue

    9410

    数据结构-队列

    队列(Queue)是一种常见的数据结构,它遵循先进先出(FIFO - First In First Out)的原则。 队列的基本操作 入队(Enqueue):在队列的尾部添加一个元素。...出队(Dequeue):从队列的头部移除一个元素。 查看队首元素(Peek):获取队列头部的元素,但不移除它。 判断队列是否为空(IsEmpty):检查队列中是否有元素。...队列的应用场景 广度优先搜索(BFS):在图的广度优先搜索算法中,队列用于存储待访问的节点。 任务调度:操作系统中的任务调度,例如按照先来先服务的原则处理进程。...Python中的queue模块 在 Python 中,queue模块提供了同步的队列类,这些队列类可用于在多线程编程中安全地传递数据。...以下是queue模块中主要的队列类及其基本用法: Queue类 Queue类实现了一个基本的先进先出(FIFO)队列

    5510

    数据结构-队列

    数据结构-队列 定义 队列(queue)在计算机科学中,是一种先进先出的线性表。 它只允许在表的前端进行删除操作,而在表的后端进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。...队列中没有元素时,称为空队列。...* 2.用ret变量来接受当前队列头的值 * 3.接收成功之后将,队列头元素置空 * 4.front指针指向下一个元素 * 5.size大小-1 *...循环队列 循环队列中有两个新词,两个指针 front 指向队列的第一个元素,初始指向0 tail 指向队列的最后一个元素的后一个位置,初始指向0 什么是循环队列 ?...* 2.用ret变量来接受当前队列头的值 * 3.接收成功之后将,队列头元素置空 * 4.front指针指向下一个元素 * 5.size大小-1 *

    37430

    数据结构队列

    分类:   1、链式队列:内部属于链表,对链表的操作做一些限制,就是链式队列   2、静态队列:内部属于数组     静态队列通常都必须是循环队列 循环队列释义:   1、静态队列为什么必须是循环队列如果按照传统的数组来表示插入和删除的话应该是...    这样的:有一个队列一共有6个,队列的实际元素只有5个,rear指向的是无效的元素 ?...图7.png   循环队列的话,把front只需要指向第一个元素就好了,这样就形成了循环队列。如图: ?...    2、队列非空front代表的是队列的第一个元素,rear代表的是       最后一个有效元素的下一个元素     3、队列空front和rear的值相等,但是不一定是零   4、循环队列入队伪算法...判断队列是否满.png

    49320

    数据结构——队列

    操作系统中是应用了一种数据结构来实现刚才提到的先到先执行的排队功能,这就是队列队列的定义 队列是一种只允许在一端进行插入操作,而在另一端进行删除操作的线性表。...; //循环队列的尾指针 }sqQueue; 循环队列的初始化代码如下: /** * 初始化一个循环队列 * * @param Q 循环队列的线性表 * * @return...队列的链式存储结构及实现 队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,我们把它简称为链队列。为了操作上的方便,我们将队列的头指针指向链队列的头结点,而尾指针指向终点结点。...循环队列和链队列的比较可以从两个方面来比较,首先从时间上,其实它们的基本操作都是常数时间,时间复杂度都为O(1),不过循环队列是事先申请好空间的,而链队列是即时申请空间的所以链队列的每次申请和释放操作都会带来一定的性能消耗和时间开销...总得来说,在可以确定队列长度最大值的情况下,建议用循环队列,如果你无法预估队列的长度时,则用链队列。 总结 我们在这里的总结,将栈和队列拿来比较。

    54010

    数据结构(三):队列

    队列:先入先出(FIFO)表。...常用操作: Enqueue:入队,即将数据写入队列末尾 Dequeue:出队,即将队列开头的元素从队列中删除并返回 应用场景:   队列通常用来实现消息(任务)的快速读写,即消息队列。...消息队列的常用来解决如下问题: 提升系统的吞吐量:通过引入消息队列,将不是必须的业务逻辑异步处理,用户请求写入消息队列后即返回响应,而不必等待全部的业务逻辑完成,提高了cpu利用效率。...流量削峰:类似秒杀的活动中,可以通过消息队列控制活动人数,消息队列满后,直接抛弃用户请求,缓解短时间内的高流量对服务器的压力。 消息通讯:利用消息队列高效的通讯机制,实现点对点通讯或聊天室。...日志处理:日志采集客户端将日志写入消息队列,日志处理服务器从读取消息队列中的日志,解决大量日志传输问题。

    36410

    3.4 数据结构队列

    01抽象数据类型队列的定义 1、和栈相反,队列是一种先进先出(FIFO)的线性表。它只允许在表的一端进行插入,而在另一端删除元素。 2、在队列中,允许插入的一端叫做队尾,允许删除的一端则称为队头。...02 链队列-队列的链式表示和实现 1、用链表示的队列简称为链队列,一个链队列显然需要两个分别指示队头和队尾的指针(分别称为头指针和尾指针)才能唯一确定。...3、一般情况下,删除队列头元素时仅需修改头结点中的指针,但当队列中最后一个元素被删除后,队列尾指针也丢失了,因此需对队尾指针重新赋值(指向头结点)。...03 循环队列-队列的顺序表示和实现 1、和顺序栈想类似,在队列的顺序存储结构中,除了用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外,尚需附设两个指针front和rear分别指示队列头元素及队列尾元素的位置...2、在非空队列中,头指针始终指向队列头元素,而尾指针始终指向队列尾元素的下一个位置。 C语言 | 统计捐款人数及人均捐款数 更多案例可以go公众号:C语言入门到精通

    4292423

    数据结构-队列结构

    顺序队列和链式队列 我们知道了,队列跟栈一样,也是一种抽象的数据结构。它具有先进先出的特性,支持在队尾插入元素,在队头删除元素,那究竟该如何实现一个队列呢?...跟栈一样,队列可以用数组来实现,也可以用链表来实现。用数组实现的栈叫作顺序栈,用链表实现的栈叫作链式栈。同样,用数组实现的队列叫作顺序队列,用链表实现的队列叫作链式队列。...确实,队列这种数据结构很基础,平时的业务开发不大可能从零实现一个队列,甚至都不会直接用到。而一些具有特殊特性的队列应用却比较广泛,比如阻塞队列和并发队列。 阻塞队列其实就是在队列基础上增加了阻塞操作。...内容小结 我的代码实现 https://gitee.com/kaiLee/struct/tree/master/src/main/java/com/s4 今天我们讲了一种跟栈很相似的数据结构队列。...除此之外,我们还讲了几种高级的队列结构,阻塞队列、并发队列,底层都还是队列这种数据结构,只不过在之上附加了很多其他功能。阻塞队列就是入队、出队操作可以阻塞,并发队列就是队列的操作多线程安全。

    35840

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券