如何使用两个堆栈实现双端队列

Har*_*eep 3 queue stack deque data-structures

Deque(“双端队列”)操作、入队和出队都可以从两端进行。

如何使用 2 个堆栈为双端队列定义ADT操作?

实施还应该考虑性能。

And*_*tin 5

最简单的解决方案是使用一个堆栈作为队列的头部,一个堆栈作为队列的尾部。入队操作只是推送到相应的堆栈,而出队操作只是在相应的堆栈上弹出。

但是,如果要从中出列的堆栈为空,则必须从另一个堆栈中弹出每个元素并将其推回到要从中出列的堆栈,然后将最后一个元素出列。这并不是真正好的性能,因此该实现的整体性能在很大程度上取决于工作负载。如果您的工作负载是平衡数量的前/后入队和出队操作,那么这将非常非常快。但是,如果您的工作负载由大量交替的头出队和尾出队组成,而队列很大,那么这显然是一个不好的方法。

希望这可以帮助