前言
最近笔试遇到这个问题,感觉蛮有意思的,分析看看
实现
一、问:用两个栈实现一个队列的功能,要求给出算法和思路
示意图
答:
-
设2个栈A,B,初始化为空
-
入队:
将新元素push
入栈A; -
出队:
(1) 判断栈B是否为空;
(2) 如果不为空,则将栈A中所有元素依次pop
出并push
到栈B;
(3) 将栈B的栈顶元素pop出;
说明:
利用栈的两次先进后出实现队列的先进先出还是蛮有意思的。同时,这样实现的队列入队和出队的平摊复杂度都还是0(1)
二、问:用两个队列实现一个栈的功能
示意图
答:
-
设2个队列A,B,初始化为空
-
入栈:
将新元素Hello
入栈到队列A中; -
入队:
(1) 将队列A中,除了队尾o
以外的Hell
依次出队A,并入队到队列B;
(2) 此时队列A中只剩o
-
出栈:
将o
元素进行队列的出队,完成栈的出栈操作 -
反复进行多次,即可实现栈的先进后出的特点