队列是一种线性结构,它遵循执行操作的特定顺序。顺序是先进先出 (FIFO)。队列的一个很好的例子是资源的任何消费者队列,其中先来的消费者首先得到服务。在本文中,讨论了不同类型的队列。
当不需要立即处理事物,但必须像广度优先搜索一样按照先进先出的顺序处理时,将使用队列。 Queue 的这个属性使它在以下场景中也很有用。
- 当资源在多个消费者之间共享时。示例包括 CPU 调度、磁盘调度。
- 当数据在两个进程之间异步传输时(数据不一定以与发送相同的速率接收)。示例包括 IO 缓冲区、管道、文件 IO 等。
有五种不同类型的队列用于不同的场景。他们是:
- 循环队列:循环队列是一种线性数据结构,其中的操作基于FIFO(先进先出)原则进行,最后一个位置连接回第一个位置,形成一个圆圈。它也被称为“环形缓冲区” 。此队列主要用于以下情况:
- 内存管理:普通队列中未使用的内存位置可以在循环队列中使用。
- 交通系统:在计算机控制的交通系统中,循环队列用于按照设定的时间一个一个地重复打开交通灯。
- CPU 调度:操作系统通常维护一个准备执行或等待特定事件发生的进程队列。
- 输入受限队列:在这种类型的队列中,输入只能从一侧(后)进行,元素的删除可以从两侧(前和后)进行。这种队列不遵循FIFO(先进先出)。
此队列用于数据消耗需要按 FIFO 顺序但由于某些原因需要删除最近插入的数据的情况下,这种情况可能是不相关的数据、性能问题等。
- 输出受限队列:在这种类型的队列中,输入可以从两侧(后部和前部)获取,元素的删除只能从一侧(前部)完成。
这个队列用于输入有一些优先级顺序要执行的情况,输入甚至可以放在第一位,以便首先执行。
- 双端队列( Double Ended Queue):双端队列也是一种队列数据结构,在两端(前后)进行插入和删除操作。这意味着,我们可以在前后位置插入,也可以从前后位置删除。
由于 Deque 同时支持堆栈和队列操作,因此可以同时使用。 Deque 数据结构支持 O(1) 时间内的顺时针和逆时针旋转,这在某些应用程序中很有用。此外,使用 Deque 可以有效解决需要删除和/或添加两端元素的问题。
- 优先级队列:优先级队列是一种特殊类型的队列,其中每个元素都与一个优先级相关联,并根据其优先级提供服务。有两种类型的优先队列。他们是:
- 升序优先队列:可以任意插入元素,但只能删除最小的元素。例如,假设有一个具有相同顺序的元素 4、2、8 的数组。因此,在插入元素时,插入的顺序是相同的,而在删除时,顺序是 2、4、8。
- 降序优先队列:元素可以任意插入,但只能从给定队列中首先删除最大的元素。例如,假设有一个具有相同顺序的元素 4、2、8 的数组。因此,在插入元素时,插入的顺序是相同的,而在删除时,顺序是 8、4、2。
优先级队列主要用于实现 CPU 调度算法。
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live