数据结构中的队列类型

2025年4月20日 | 阅读5分钟

在本文中,我们将讨论队列的类型。但在讨论类型之前,我们应该先简要介绍一下队列。

什么是队列?

队列是一种数据结构,类似于现实世界中的队列。队列是一种数据结构,其中先进先出 (FIFO) 原则得到遵循。队列也可以定义为一种列表或集合,其中插入操作从一端(称为队列的**后端**或**尾部**)进行,而删除操作从另一端(称为队列的**前端**或**头部**)进行。

队列的现实世界示例是电影院外的售票队列,排在队列中的第一个人先拿到票,最后一个人最后拿到票。数据结构中的队列遵循类似的方法。

队列的表示如下图所示 -

Types of Queue

现在,让我们转向队列的类型。

队列的类型

队列有四种不同的类型,如下所列 -

Types of Queue
  • 简单队列或线性队列
  • 循环队列
  • 优先队列
  • 双端队列 (或 Deque)

让我们讨论每种队列类型。

简单队列或线性队列

在线性队列中,插入操作从一端进行,而删除操作从另一端进行。进行插入操作的一端称为后端,进行删除操作的一端称为前端。它严格遵循 FIFO 规则。

Types of Queue

使用线性队列的主要缺点是插入只能从后端进行。如果从队列中删除了前三个元素,即使线性队列中仍有空间,我们也无法插入更多元素。在这种情况下,线性队列显示溢出条件,因为后端指向队列的最后一个元素。

要了解更多关于数据结构中队列的信息,您可以点击链接 - 数据结构-队列

循环队列

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

Types of Queue

线性队列中出现的缺点通过使用循环队列来克服。如果循环队列中有空闲空间,可以通过简单地增加后端的值将新元素添加到空闲空间中。使用循环队列的主要优点是更好地利用内存。

要了解更多关于循环队列的信息,您可以点击链接 - 循环队列

优先队列

这是一种特殊类型的队列,其中元素根据优先级进行排列。它是一种特殊类型的队列数据结构,其中每个元素都关联着一个优先级。假设一些元素具有相同的优先级,它们将根据 FIFO 原则进行排列。优先级队列的表示如下图所示 -

Types of Queue

优先级队列中的插入基于到达,而优先级队列中的删除基于优先级。优先级队列主要用于实现 CPU 调度算法。

优先级队列有两种类型,讨论如下 -

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

要了解更多关于优先级队列的信息,您可以点击链接 - ds-优先级队列

双端队列 (或 Deque)

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

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

双端队列的表示如下图所示 -

Types of Queue

要了解更多关于双端队列的信息,您可以点击链接 - ds-双端队列

双端队列有两种类型,讨论如下 -

  • 输入受限双端队列 - 顾名思义,在输入受限队列中,插入操作只能在一端执行,而删除操作可以从两端执行。
    Types of Queue
  • 输出受限双端队列 - 顾名思义,在输出受限队列中,删除操作只能在一端执行,而插入操作可以从两端执行。
    Types of Queue

现在,让我们看看对队列执行的操作。

对队列执行的操作

可以对队列执行的基本操作如下所列 -

  • 入队 (Enqueue): 入队操作用于在队列的后端插入元素。它返回 void。
  • 出队 (Dequeue): 它从队列的前端执行删除操作。它还返回从前端删除的元素。它返回一个整数值。
  • 查看 (Peek): 这是第三个操作,它返回队列中由前端指针指向的元素,但不删除它。
  • 队列溢出 (isfull): 当队列完全满时,它显示溢出条件。
  • 队列下溢 (isempty): 当队列为空时,即队列中没有元素时,它显示下溢条件。

现在,让我们看看实现队列的方法。

实现队列的方法

有两种实现队列的方法

  • 使用数组实现: 队列中的顺序分配可以使用数组实现。有关更多详细信息,请点击以下链接:数组表示的队列
  • 使用链表实现: 队列中的链表分配可以使用链表实现。有关更多详细信息,请点击以下链接:链表实现的队列

这就是本文的全部内容。希望本文能为您提供帮助和信息。