algorithm - 队列抽象数据类型到底是什么?

标签 algorithm data-structures language-agnostic queue

我不清楚队列的概念。看来这个词是模棱两可的,或者至少我对此感到困惑。
虽然似乎对队列最常见的解释(例如在维基百科中)是它是一种遵循 FIFO 原则的抽象数据类型,但实际上这个术语似乎具有更广泛的含义。
例如,我们有

  • 优先级队列,其中根据优先级检索每个项目,

  • 我们有一个堆栈,它也是逆向队列 (LIFO) 的一种形式,

  • 我们有消息队列,它似乎只是一个项目列表,没有 排序,通过将简单列表分类为队列 etc

那么有人可以帮我弄清楚为什么队列有这么多不同的含义吗?

最佳答案

队列本质上是一种遵循 FIFO 原则作为其默认性质的数据结构。 让我们把这个队列当作我们日常生活中的一个队列。以火车站排队购票为例。

正常队列:站在队列最前面的人获得门票,任何新到达的人站在队列的末尾,等待轮到他获得门票。

优先队列:假设您是站在该队列中间的贵宾。售票员会立即注意到您,并叫您到队列的最前面取票,即使轮不到您买票。如果你不重要,队列就会继续扮演它通常的角色,但是一旦任何元素被认为比另一个更重要,它就会被拾起,而不管它在队列中的位置。但除此之外,队列的默认性质保持不变。

堆栈:我们不要将它与队列混淆。堆栈的用途与队列的用途本质上不同。举一个洗过并放在厨房里的盘子的例子,最后洗过的盘子是第一个被挑选出来上菜的。因此,堆栈和队列在不同情况下发挥不同作用,不应相互混淆。

消息队列:与优先级队列一样,该队列的默认性质是首先读取先到的消息,而即将到来的消息在队列中排队等待它们轮流,除非一条消息被认为比另一条消息更重要,并且在正常轮流之前被调用到队列的前面。

因此,任何类型的队列的默认性质都保持不变,它继续遵循其 FIFO 原则,除非在特殊情况下另有规定。

希望对你有帮助

关于algorithm - 队列抽象数据类型到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20588125/

相关文章:

java - 使用 java 计算所有构成有效命令的子字符串

arrays - 检查数组之间重叠的算法

python - 在 Python 中执行 N*M 迭代的最快算法

c++ - 从字符串列表中找到最快的字符串

data-structures - 用于快速索引查找的列表数据结构

string - 如何检查给定的字符串是否是回文?

algorithm - 哪个更快? if-else 语句中的两个 for 还是带有 if-else 语句的单个 for 语句?

java - Java 和 Bellman-Ford 中的加权有向图实现

data-structures - 使前n个元素保持排序顺序的最佳数据结构是什么?

algorithm - 对具有重复元素的数组进行排序的最佳数据结构是什么?