队列
先进先出(FIFO)
栈
后进先出(LIFO)
双栈实现队列
如何用两个栈,仅使用栈的基本操作实现队列。
思路:
1. 进队列操作使用stack2, 当enqueue数据时,直接把数据push到stack2.
2. 出队列操作使用stack1, 当dequeue数据时, 首先判断stack1是否为空,如果不为空,则从stack1 pop数据返回。如果stack1为空,则依次把stack2的数据全部pop出来,并push到stack1, 使用stack1 pop数据返回。
源码参考实现
class QueueTwoStack(object):
'''使用双栈实现队列'''
def __init__(self):
self.__stack1 = LinkStack()
self.__stack2 = LinkStack()
def enqueue(self, v):
self.__stack2.push(v)
def dequeue(self):
if self.__stack1.isEmpty():
while not self.__stack2.isEmpty():
self.__stack1.push(self.__stack2.pop())
return self.__stack1.pop()
def peek(self):
if self.__stack1.isEmpty():
while not self.__stack2.isEmpty():
self.__stack1.push(self.__stack2.pop())
return self.__stack1.peek()
def isEmpty(self):
return self.__stack1.isEmpty() and self.__stack2.isEmpty()
def size(self):
return self.__stack1.size() + self.__stack2.size()