在网上查看一些算法练习时,我发现了一个有趣的问题:
如何使用LIFO实现FIFO?
我尝试了自己解决,但最终只得到了一种解决方案:每次需要FIFO的front元素时,将LIFO复制到另一个LIFO中(排除最后一个元素,即front),获取前面的元素并将其删除,然后将第二个LIFO复制回第一个LIFO。
但这显然非常慢,它生成了一个简单的循环,如下所示:
for(!myfifo.empty()) {
myfifo.pop();
}
在标准FIFO实现中,时间复杂度为O(n²)而非O(n)。
当然,LIFO不是用来执行FIFO的,使用原生FIFO和基于LIFO的伪造FIFO肯定不会有相同的复杂度,但我认为肯定有比O(n²)更好的方法。有人有什么想法吗?
提前感谢。