数据结构与算法: 队列Queue

栈Stack:只允许在一端进行插入或者删除操作的线性表
队列Queue: 只允许在一端进行插入,在另一端删除的线性表

队列特性Queue:

  1. 队列可以定义为有序列表,它允许在一端(称为 REAR)执行插入操作,并在另一端(称为 FRONT)执行删除操作。
  2. 队列称为“先进先出”列表。
  3. 例如,排队等候火车票的人会排队等候。

队列是类似于现实世界中队列的数据结构。队列是一种数据结构,其中先到先出的数据结构将首先输出,并且它遵循 FIFO(先进先出)(First In First Out)策略。队列也可以定义为列表或集合,其中插入是从称为队列后端或尾部的一端完成的,而删除是从另一端(称为队列的前端或头部)完成的。

队列基本操作:

InitQueue(&Q) //初始化队列
DestroyQueue(&Q)// 销毁队列

EnQueue(&Q,x) //入队,若队列Q未满,将x加入,使之成为新的队尾
DeQueue(&Q,&x) //出队,若队列Q非空,删除队头元素,并用x返回

GetHead(Q,&x) 读队头元素

队列类型

简单队列或线性队列
循环队列
优先级队列
双端队列( Deque)

线性队列

请添加图片描述
线性队列严格遵循先进先出规则。
使用线性队列的主要缺点是插入仅从后端完成。如果从队列中删除前三个元素,则即使线性队列中有可用的空间,我们也无法插入更多元素。在这种情况下,线性队列显示溢出情况,因为后部指向队列的最后一个元素。

循环队列

在循环队列中,所有节点都表示为循环。它类似于线性队列,只是队列的最后一个元素连接到第一个元素。它也被称为环形缓冲器,因为所有末端都连接到另一端。

在这里插入图片描述
通过使用循环队列可以克服线性队列中发生的缺点。如果空空间在循环队列中可用,则只需递增 rear 的值即可在空白空间中添加新元素。使用循环队列的主要优点是更好的内存利用率。

优先级队列

它是一种特殊类型的队列,其中元素是根据优先级排列的。它是一种特殊类型的队列数据结构,其中每个元素都有与之关联的优先级。假设某些元素以相同的优先级出现,它们将根据FIFO原则进行排列。
在这里插入图片描述
优先级队列中的插入基于到达时间进行,而优先级队列中的删除则基于优先级进行。优先级队列主要用于实现CPU调度算法。

有两种类型的优先级队列讨论如下:

  • 升序优先级队列 >在优先级升序队列中,可以按任意顺序插入元素,但只能先删除最小的元素。假设数组的元素 7、5 和 3 的顺序相同,因此,可以使用相同的顺序进行插入,但删除元素的顺序为 3、5、7。
  • 降序优先级队列 >在降序优先级队列中,可以按任意顺序插入元素,但只能先删除最大的元素。假设一个数组的元素 7、3 和 5 的顺序相同,因此,可以使用相同的顺序进行插入,但删除元素的顺序是 7、5、3。

Deque(双端队列)

在 Deque 或双端队列中,可以从队列的两端从前面或后面进行插入和删除。这意味着我们可以从队列的前端和后端插入和删除元素。Deque可以用作回文检查器,这意味着如果我们从两端读取字符串,则字符串将是相同的。

Deque 既可以用作堆栈,也可以用作队列,因为它允许在两端执行插入和删除操作。Deque可以被视为堆栈,因为堆栈遵循LIFO(最后进先出)原则,其中插入和删除两者只能从一端执行。在deque中,可以从一端执行插入和删除,并且Deque不遵循FIFO原则。

请添加图片描述

有两种类型的deque
  • 输入受限 : 在输入受限队列中,插入操作只能在一端执行,而删除操作可以从两端执行。

  • 输出受限 : 在输出受限队列中,只能在一端执行删除操作,而插入操作可以从两端执行。

对队列执行的操作

  1. 入队:用于在队列的后端插入元素。它返回无效。
  2. 出队:从队列的前端执行删除。它还返回已从前端删除的元素。它返回一个整数值。
  3. 查看:这是返回元素的第三个操作,该元素由队列中的前指针指向,但不将其删除。
  4. 队列溢出(已满):它显示队列完全满时的溢出情况。
  5. 队列下溢(空):它显示队列为空时的条件,即队列中没有元素。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Michael_chemic

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值