我有点困惑。
article说:
队列是一种线性结构,遵循执行操作的特定顺序。顺序为先进先出(FIFO)。队列的一个很好的例子是资源的任何使用者队列,其中首先服务于第一个使用者的资源。堆栈和队列之间的区别在于删除。在堆栈中,我们删除最近添加的项目;在队列中,我们删除了最近最少添加的项目。
说FIFO(先进先出)和LILO(先进后出)是一样的吗?
对于堆栈:LIFO(后进先出)和FILO(后进先出)是否相同?
但是没有人使用LILO和FILO。
答案 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 的逻辑相同。