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

Is FIFO in a queue is equivalent to LILO?

这里我有点懵

article表示:

A Queue is a linear structure which follows a particular order in which the operations are performed. The order is First In First Out (FIFO). A good example of a queue is any queue of consumers for a resource where the consumer that came first is served first. The difference between stacks and queues is in removing. In a stack we remove the item the most recently added; in a queue, we remove the item the least recently added.

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

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

但是从来没有人使用过 LILO 和 FILO。

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

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

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

当我们出队时,最靠近前面的元素从队列中移除,队列的其余部分"moves up"看起来像:

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

在这个抽象的例子中,"o"是第一个入队的元素(先入),第一个出队的元素(先出)。

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

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

现在,从这个dequeue不难看出,"x"是最后一个入队(last in)的元素,也是最后一个出队(last out)的元素。

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

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

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

第二步,"x"成为最后一个入栈的元素(last in)。然后,当我们 pop 时,栈顶元素被移除,它仍然是 "x"(最后出)。

如果我们要弹出第二次,我们可以得到"o"。这个元素是第一个,也是最后一个被删除的元素。因此,行为可以用 LIFO 和 FILO 来描述。

至于为什么一个命名约定优于另一个命名约定,-("/)-

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