¶普通队列
支持push和pop操作
使用两个对顶栈stk1和stk2,push操作就直接加到stk2的尾部,pop操作就从stk1中弹出,如果stk1为空,就把stk2中的所有元素依次pop后push入stk1
¶双端队列
支持push_front、push_back、pop_front、pop_back操作
同样用两个对顶栈来实现,但是如果pop_front和pop_back操作交替进行,使用上面的方法就会TLE。考虑均摊的思想,如果在pop时该栈空了,就把另一个栈栈底的$\fracn2$个元素push过去
¶摊还
考虑现在总共有n个物品,然后在m个位置可能会消耗物品,我们可以把这n个物品均分到这m个位置,如果某个位置的物品被消耗完说明物品数至少减少了$\frac1m$,之后我们统计当前物品的数量后再进行均分。$T(n)=T(\frac{n(m-1)}{m})+O(n)$$T(n)=O(n)$