【发布时间】:2012-03-12 08:08:40
【问题描述】:
在网上看了一些算法练习,发现了一个有趣的:
您将如何使用 LIFO 实现 FIFO?
我自己尝试过,但最终只有一个解决方案:每次我们想要 FIFO 的 front 元素时,将 lifo 复制到另一个 lifo(排除最后一个元素,即最前面),获取最前面的元素并将其移除,然后将第二个 LIFO 复制回第一个 LIFO。
但这当然慢得可怕,它会产生一个像这样的简单循环:
for(!myfifo.empty()) {
myfifo.pop();
}
在 FIFO 的标准实现上采用 O(n²) 而不是 O(n)。
当然,LIFO 不是为了做 FIFO,我们当然不会通过使用“本地”FIFO 和基于 LIFO 的假 FIFO 来获得相同的复杂性,但我认为肯定有一种方法可以做到优于 O(n²)。有人知道吗?
提前致谢。
【问题讨论】: