描述
正如标题所述,你需要使用两个栈来实现队列的一些操作。
队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。
pop和top方法都应该返回第一个元素的值。
您在真实的面试中是否遇到过这个题?
是
样例
比如push(1), pop(), push(2), push(3), top(), pop(),你应该返回1,2和2
挑战
仅使用两个栈来实现它,不使用任何其他数据结构,push,pop 和 top的复杂度都应该是均摊O(1)的
实现代码:
思路:
定义两个栈, 一个用来存放数据,一个用来进行翻转操作,实现队列。假如将1,2,3,4,5用队列表示,依次压入栈中,就成了[1, 2, 3, 4, 5], 将他们依次取出,放入另一个栈中,变成[5, 4, 3, 2, 1], 就达到了队列的效果。执行过程中要注意对栈的判空。
具体代码:
class MyQueue:
def __init__(self):
# do intialization if necessary
self.stackPush = [] # 压入数据栈
self.stackPop = [] # 临时存放数据栈
def __init__(self):
# do intialization if necessary
self.stackPush = [] # 压入数据栈
self.stackPop = [] # 临时存放数据栈
"""
@param: element: An integer
@return: nothing
"""
def push(self, element):
# write your code here
#如果stackPush为空且stackPop不为空,则执行过pop或top操作,
#这时将剩下元素重新压入stackPush中,再加入新的元素,不影响效果
if self.stackPop and not len(self.stackPush):
while self.stackPop:
self.stackPush.append(self.stackPop.pop())
self.stackPush.append(element)
@param: element: An integer
@return: nothing
"""
def push(self, element):
# write your code here
#如果stackPush为空且stackPop不为空,则执行过pop或top操作,
#这时将剩下元素重新压入stackPush中,再加入新的元素,不影响效果
if self.stackPop and not len(self.stackPush):
while self.stackPop:
self.stackPush.append(self.stackPop.pop())
self.stackPush.append(element)
"""
@return: An integer
"""
def pop(self):
# write your code here
#如果stackPush为空且stackPop也为空,没有数据,报错
if not len(self.stackPush) and not len(self.stackPop):
raise ValueError('your stack is empty!')
if not len(self.stackPop):
#如果stackpop为空,就遍历stackPUSH,全部压入stackpop中
while self.stackPush:
self.stackPop.append(self.stackPush.pop())
@return: An integer
"""
def pop(self):
# write your code here
#如果stackPush为空且stackPop也为空,没有数据,报错
if not len(self.stackPush) and not len(self.stackPop):
raise ValueError('your stack is empty!')
if not len(self.stackPop):
#如果stackpop为空,就遍历stackPUSH,全部压入stackpop中
while self.stackPush:
self.stackPop.append(self.stackPush.pop())
return self.stackPop.pop()
"""
@return: An integer
"""
def top(self):
# write your code here
if not len(self.stackPush) and not len(self.stackPop):
raise ValueError('your stack is empty!')
if not len(self.stackPop):
while self.stackPush:
self.stackPop.append(self.stackPush.pop())
return self.stackPop[-1]
@return: An integer
"""
def top(self):
# write your code here
if not len(self.stackPush) and not len(self.stackPop):
raise ValueError('your stack is empty!')
if not len(self.stackPop):
while self.stackPush:
self.stackPop.append(self.stackPush.pop())
return self.stackPop[-1]