队列中的FIFO是否等于LILO?

时间:2019-05-16 14:15:05

标签: data-structures stack queue fifo lifo

我有点困惑。

article说:

  

队列是一种线性结构,遵循执行操作的特定顺序。顺序为先进先出(FIFO)。队列的一个很好的例子是资源的任何使用者队列,其中首先服务于第一个使用者的资源。堆栈和队列之间的区别在于删除。在堆栈中,我们删除最近添加的项目;在队列中,我们删除了最近最少添加的项目。

说FIFO(先进先出)和LILO(先进后出)是一样的吗?

对于堆栈:LIFO(后进先出)和FILO(后进先出)是否相同?

但是没有人使用LILO和FILO。

2 个答案:

答案 0 :(得分:1)

是的,对于堆栈和队列,两种命名约定在技术上都是准确的。

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

     +---+---+---+---+
Back |   |   | x | o | Front
     +---+---+---+---+

当我们出队时,最靠近最前面的元素将从队列中删除,其余的队列“向上移动”看起来像:

     +---+---+---+---+
Back |   |   |   | x | Front (o dequeued)
     +---+---+---+---+

在此抽象示例中,“ o”是第一个要入队的元素(先进先出),也是第一个要出队的元素(先进先出)。

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

     +---+---+---+---+
Back |   |   |   |   | Front (x dequeued)
     +---+---+---+---+

现在,从此出队很容易看出,“ x”是要入队的最后一个元素(后进),也是要出队的最后一个元素(后出)。

因此,FIFO和LILO是等效术语。

为简便起见,我将示例压缩为一个堆栈:

+---+    +---+    +---+
|   |    |   |    |   |
+---+    +---+    +---+
|   |    |   |    |   |
+---+    +---+    +---+
|   |    | x |    |   |
+---+    +---+    +---+
| o |    | o |    | o |
+---+    +---+    +---+
Push o   Push x   Pop

在第二步中,“ x”成为最后一个被压入堆栈的元素(最后一个)。然后,当我们弹出时,将删除堆栈的顶部元素,该元素仍为“ x”(最后输出)。

如果我们第二次弹出,可以给我们“ o”。此元素是第一个元素,也是最后一个要删除的元素。因此,LIFO和FILO都可以描述这种行为。

关于为什么使用一种命名约定而不使用另一种命名约定的原因,请使用-(“ /)-

答案 1 :(得分:1)

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