队列的四种类型

1. 简介

在数据结构中,队列(Queue) 是一种非常基础且广泛使用的结构。根据使用场景和操作方式的不同,队列可以分为多种类型。本文将介绍四种常见的队列类型,并结合实际应用场景进行说明,帮助你更深入地理解它们的特点和用途。

2. 普通队列(Simple Queue)

普通队列是最基础的队列形式,遵循“先进先出(FIFO)”原则。

入队(Enqueue):发生在队列尾部(rear)

出队(Dequeue):发生在队列头部(front)

结构示意如下:

应用场景

普通队列适用于以下场景:

进程调度

磁盘调度

内存管理

IO 缓冲区

管道(Pipes)

客服电话系统

中断处理

踩坑提醒 ⚠️

普通队列的一个明显缺点是:当队列头部有元素被出队后,前面的空间无法被再次利用,容易造成空间浪费。

3. 循环队列(Circular Queue)

循环队列是对普通队列的一种优化,解决了空间浪费的问题。它将队列首尾相连,形成一个环形结构:

当尾部指针到达数组末尾时,可以“绕回”数组开头继续插入

只要队列中存在空位,就可以继续插入元素

结构示意如下:

应用场景

交通信号灯的切换控制

替代普通队列用于上述所有场景,提升内存利用率

优势 ✅

更好的内存利用率

避免普通队列中出现的“假满”现象(即队列未满但无法插入)

4. 优先队列(Priority Queue)

优先队列是一种带有优先级的队列结构。每个元素都有一个优先级,出队时总是优先级最高的元素先出队。

入队按到达顺序插入

出队根据优先级决定(高优先级先出)

若优先级相同,则按 FIFO 原则处理

结构示意如下:

应用场景

中断处理

Prim 最小生成树算法

Dijkstra 最短路径算法

A* 寻路算法

堆排序(Heap Sort)

霍夫曼编码(Huffman Coding)

实现方式

通常使用 堆(Heap) 来实现优先队列,以保证插入和删除操作的效率。

5. 双端队列(Deque - Double-Ended Queue)

双端队列允许在队列的两端进行插入和删除操作:

可以从头部或尾部入队

也可以从头部或尾部出队

结构示意如下:

应用场景

浏览历史记录

撤销操作(Undo)

A-Steal 工作窃取调度算法

实现栈或普通队列

特殊变种

5.1 输入受限双端队列(Input-Restricted Deque)

只能在尾部入队

可以在头部和尾部出队

结构示意如下:

5.2 输出受限双端队列(Output-Restricted Deque)

可以在头部和尾部入队

只能在头部出队

结构示意如下:

6. 总结

我们介绍了四种常见的队列类型及其应用场景:

队列类型

特点

常见用途

普通队列

FIFO,入队尾,出队头

进程调度、缓冲区管理

循环队列

首尾相连,空间复用

交通灯控制、替代普通队列

优先队列

按优先级出队

算法优化、中断处理

双端队列

头尾均可操作

历史记录、撤销操作、调度算法

掌握这些队列类型有助于你在实际开发中选择最适合的数据结构,从而写出更高效、更健壮的程序。

Copyright © 2088 成都高校区网游活动站 All Rights Reserved.
友情链接