Data structures 队列中的FIFO等同于LILO吗?

Data structures 队列中的FIFO等同于LILO吗?,data-structures,stack,queue,fifo,lifo,Data Structures,Stack,Queue,Fifo,Lifo,我在这里有点困惑 发言人说: 队列是一种线性结构,遵循执行操作的特定顺序。顺序为先进先出(FIFO)。队列的一个很好的例子是资源的任何消费者队列,其中首先到达的消费者首先得到服务。堆栈和队列的区别在于删除。在堆栈中,我们删除最近添加的项;在队列中,我们删除最近添加最少的项 FIFO(先进先出)与LILO(后进先出)相同,这样说对吗 对于堆栈:它与后进先出(后进先出)和FILO(后进先出)相同吗 但是从来没有人使用LILO和FILO。是的,在堆栈和队列的情况下,这两种命名约定在技术上都是准确的 考

我在这里有点困惑

发言人说:

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

FIFO(先进先出)与LILO(后进先出)相同,这样说对吗

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


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

是的,在堆栈和队列的情况下,这两种命名约定在技术上都是准确的

考虑大小为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”(last out)

如果我们再来一次,我们可能会被打“o”。此元素是中的第一个元素,也是要删除的最后一个元素。因此,这种行为可以用后进先出和后进先出来描述


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

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

考虑一个大小为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”成为推送到堆栈的最后一个元素(last In)。然后,当我们弹出时,堆栈的顶部元素被移除,它仍然是“x”(last out)

如果我们第二次弹出,我们可能会得到“o”。这个元素是第一个进入的元素,也是最后一个被删除的元素。因此,这种行为可以用后进先出和后进先出来描述


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

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

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

因为它是围绕着一个更好的识别和更快的信息传递的措辞标准化的。你是人类,但如果我把你称为智人,那就是我们正在谈论的同一件事。谢谢。所以完全一样,对吗?是的,如果我告诉你“你是队伍中最后一个,所以你将是最后一个坐过山车的人”。这与“排在第一位的人将先去过山车,依此类推,直到最后一个人”相同。你能回答吗,这样我就可以结束这个问题了?因为它是围绕着一个更好的识别和更快的信息传递的措辞标准化的。你是人类,但如果我把你称为智人,那就是我们正在谈论的同一件事。