这里主要是使用两个栈来实现一个队列,并实现队列的入队和出队函数。
对于一个单词hello,如果正常情况下按照队列中先进先出的特点,会按照hello的顺序入队,同样也会按照hello的顺序出队。
添加图片注释,不超过 140 字(可选)
因此如果想要利用两个栈来形成队列,就要将后进先出的结构特点改造成先进先出,将队列的入队和出队两个过程分开来进行处理,栈的入栈和队列的入队其实是差别不大的,只是出栈和出队的顺序是相反的,只需要想办法利用两个栈的配合来模拟实现先进先出的出队过程即可。
利用两个栈来实现先进先出,假设在第一个栈中已经完成了入栈的过程
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
如果想要实现以hello的顺序出栈,借助第二个栈将h重新置于栈的顶部,o置于栈的底部,有了这一思路就很容易解决这个问题了,只要将第一个栈中的元素依次出栈并放入第二个栈中,即可使单词按照hello的顺序在第二个栈中从栈顶至栈底排列。
添加图片注释,不超过 140 字(可选)
然后对二个栈从栈顶开始依次出栈即可,这样就实现了利用栈实现队列先进先出的出队效果。
使用python代码实现如下:
class queue():
def __init__(self):
self.stack1=[]
self.stack2=[]
def push_(self,num):
self.stack1.append(num)
def pop_(self):
if len(self.stack2)==0:
while self.stack1:
self.stack2.append(self.stack1.pop())
return self.stack2.pop()