由于栈是一种后进先出的数据结构,而队列是一种先进先出的数据结构,两者互相实现时要借助一个辅助的栈/队列,主要的思想还是根据两个相同的数据运算来达到互相实现。
1,两个栈实现队列
- 保证辅助栈为空,而数据栈来进行入队操作,这样在入队复杂度为 O ( 1 ) O(1) O(1)
- 每次出队或者取队头的时候,由于该元素在栈底,借助辅助栈把它还原到栈顶,然后取出或删去,剩下的数据要记得还原!否则顺序就会改变了。复杂度 O ( n ) O(n) O(n)
- 这两个操作也可以互换复杂度,具体看要求
2,两个队列实现栈
- 保证辅助队列为空,而数据队列来进行入栈操作,这样在入栈复杂度为 O ( 1 ) O(1) O(1)
- 每次出栈或取栈顶的时候,由于该元素在队尾,借助辅助队列把它还原到数据队列的队头,然后取出或删去,剩下的数据要记得还原!否则顺序就会改变了。复杂度 O ( n ) O(n) O(n)
- 这两个操作也可以互换复杂度,具体看要求
3,关于共享栈
实际上就是用一个数组来完成两个栈的存放,两个base分别在两端,初始化都为越界的情况,也就是-1和MAX,然后满递增或满递减,栈满的情况是 ∣ t o p 1 − t o p 2 ∣ = = 1 |top1 - top2| == 1 ∣top1−top2∣==1,共享栈能解决顺序栈上溢的问题。