栈和队列相互实现

用栈实现队列

测试链接:232.用栈实现队列

思路:两个栈,一个 in 栈负责入队列,一个 out 栈负责出队列

出队列操作时,从 in 栈,把数据倒入 out 栈,要满足:1) out 空了,才能倒数据;2) 如果倒数据,in 必须倒完才能进行下一次从 in 栈倒数据入 out

所有操作的时间复杂度都是 O(1) 的(一个数据只会进出 in 栈一次,进出 out 栈一次)。出队列时如果 out 栈空,那么要将 in 栈所有数据倒入 out 栈,时间复杂度不是 O(n) 吗?不是的,均摊思想

用队列实现栈

测试链接:225.用队列实现栈

思路:一个队列,入栈操作时将队列之前的所有元素依次从头部出队列再从尾部进队列,则顺序就变成了栈的顺序(或者将这个操作延迟到出栈操作也是可以的,一样的思路)

入栈操作的时间复杂度是 O(n),其他操作为 O(1)(这已经是最优解)