首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >队列中的FIFO是否等同于LILO?

队列中的FIFO是否等同于LILO?
EN

Stack Overflow用户
提问于 2019-05-16 14:15:05
回答 2查看 7.2K关注 0票数 1

我在这里有点困惑。

文章说:

队列是一种线性结构,它遵循执行操作的特定顺序。顺序是先入先出(FIFO)。队列的一个很好的例子是,在资源中,任何消费者队列都是先服务的。堆栈和队列之间的区别在于删除。在堆栈中,我们删除最近添加的项;在队列中,删除最近添加的项。

说先进先出(先进先出)和LILO (最后一次,最后一次出局)是对的吗?

对于堆栈:它与LIFO (最后,先出)和FILO (先进,后出)相同吗?

但从来没有人用过利洛和菲罗。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-16 14:33:14

是的,在堆栈和队列的情况下,任何一个命名约定在技术上都是准确的。

考虑一个大小为4的队列,我们将"o“加入队列,然后将"x”加入队列,然后将它们按相应的顺序放入队列中。

代码语言:javascript
复制
     +---+---+---+---+
Back |   |   | x | o | Front
     +---+---+---+---+

当我们离队列最近的元素从队列中移除时,队列的其余部分“向上”移动,如下所示:

代码语言:javascript
复制
     +---+---+---+---+
Back |   |   |   | x | Front (o dequeued)
     +---+---+---+---+

在这个抽象示例中,"o“是要排队的第一个元素(第一个in),以及第一个要退出队列的元素(先出)。

然后,我们可以再次排起队,并接收x。

代码语言:javascript
复制
     +---+---+---+---+
Back |   |   |   |   | Front (x dequeued)
     +---+---+---+---+

现在,从这个排队列中可以很容易地看出,"x“是要排队的最后一个元素(最后一个),而最后一个元素是离开队列的元素(最后一个退出)。

因此,FIFO和LILO是等价的术语。

为了简洁起见,我将压缩堆栈的示例:

代码语言:javascript
复制
+---+    +---+    +---+
|   |    |   |    |   |
+---+    +---+    +---+
|   |    |   |    |   |
+---+    +---+    +---+
|   |    | x |    |   |
+---+    +---+    +---+
| o |    | o |    | o |
+---+    +---+    +---+
Push o   Push x   Pop

在第二步中,"x“成为推到堆栈的最后一个元素(最后一个in)。然后,当我们弹出时,堆栈的顶部元素被移除,它仍然是"x“(最后一个输出)。

如果我们再弹一次,我们就能得到"o“。这个元素是第一个in,也是要删除的最后一个元素。因此,LIFO和FILO都可以描述这种行为。

至于为什么使用一个命名约定而不是另一个命名约定,-("/)-

票数 2
EN

Stack Overflow用户

发布于 2020-12-24 02:36:24

如前所述,除了结构/内存的状态之外,LILO和FIFO基本上是相同的。使用FIFO (先入先出),第一个被推入的元素将是弹出的第一个元素(如果堆栈在开始时为空)。如果队列不是空的,并且我们推送一个元素"A",对于代理,"first“元素是"A",但是我们将弹出存储在queue中的first element ,它可能是前面存储的任何元素!只有当队列为空时,"first“元素才会弹出为”先出“元素。LILO队列不关心队列的状态:最后一个pushed元素将是最后一个弹出的元素,不管在队列之前或队列中推送的元素有多少。因此,严格地说,FIFO结构还告诉我们有关堆栈的更多信息:默认情况下它是空的;LILO结构的行为方式相同,但不关心瞬态(队列状态)。FILO和LIFO的逻辑相同。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56170660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档