我在这里有点困惑。
文章说:
队列是一种线性结构,它遵循执行操作的特定顺序。顺序是先入先出(FIFO)。队列的一个很好的例子是,在资源中,任何消费者队列都是先服务的。堆栈和队列之间的区别在于删除。在堆栈中,我们删除最近添加的项;在队列中,删除最近添加的项。
说先进先出(先进先出)和LILO (最后一次,最后一次出局)是对的吗?
对于堆栈:它与LIFO (最后,先出)和FILO (先进,后出)相同吗?
但从来没有人用过利洛和菲罗。
发布于 2019-05-16 14:33:14
是的,在堆栈和队列的情况下,任何一个命名约定在技术上都是准确的。
考虑一个大小为4的队列,我们将"o“加入队列,然后将"x”加入队列,然后将它们按相应的顺序放入队列中。
+---+---+---+---+
Back | | | x | o | Front
+---+---+---+---+当我们离队列最近的元素从队列中移除时,队列的其余部分“向上”移动,如下所示:
+---+---+---+---+
Back | | | | x | Front (o dequeued)
+---+---+---+---+在这个抽象示例中,"o“是要排队的第一个元素(第一个in),以及第一个要退出队列的元素(先出)。
然后,我们可以再次排起队,并接收x。
+---+---+---+---+
Back | | | | | Front (x dequeued)
+---+---+---+---+现在,从这个排队列中可以很容易地看出,"x“是要排队的最后一个元素(最后一个),而最后一个元素是离开队列的元素(最后一个退出)。
因此,FIFO和LILO是等价的术语。
为了简洁起见,我将压缩堆栈的示例:
+---+ +---+ +---+
| | | | | |
+---+ +---+ +---+
| | | | | |
+---+ +---+ +---+
| | | x | | |
+---+ +---+ +---+
| o | | o | | o |
+---+ +---+ +---+
Push o Push x Pop在第二步中,"x“成为推到堆栈的最后一个元素(最后一个in)。然后,当我们弹出时,堆栈的顶部元素被移除,它仍然是"x“(最后一个输出)。
如果我们再弹一次,我们就能得到"o“。这个元素是第一个in,也是要删除的最后一个元素。因此,LIFO和FILO都可以描述这种行为。
至于为什么使用一个命名约定而不是另一个命名约定,-("/)-
发布于 2020-12-24 02:36:24
如前所述,除了结构/内存的状态之外,LILO和FIFO基本上是相同的。使用FIFO (先入先出),第一个被推入的元素将是弹出的第一个元素(如果堆栈在开始时为空)。如果队列不是空的,并且我们推送一个元素"A",对于代理,"first“元素是"A",但是我们将弹出存储在queue中的first element ,它可能是前面存储的任何元素!只有当队列为空时,"first“元素才会弹出为”先出“元素。LILO队列不关心队列的状态:最后一个pushed元素将是最后一个弹出的元素,不管在队列之前或队列中推送的元素有多少。因此,严格地说,FIFO结构还告诉我们有关堆栈的更多信息:默认情况下它是空的;LILO结构的行为方式相同,但不关心瞬态(队列状态)。FILO和LIFO的逻辑相同。
https://stackoverflow.com/questions/56170660
复制相似问题