栈与队列
232. 用栈实现队列
1、用两个栈可以模拟队列。
2、def peek()函数,在栈self.stack_out, pop()出最后一个元素后, 要再把这个元素加入self.stack_out里。
3、return not (self.stack_in or self.stack_out) 可以返回FALSE, 然而return (self.stack_in and self.stack_out)返回空列表[ ]。
class MyQueue(object):
def __init__(self):
self.stack_in = []
self.stack_out = []
def push(self, x):
"""
:type x: int
:rtype: None
"""
self.stack_in.append(x)
def pop(self):
"""
:rtype: int
"""
if self.empty():
return None
if self.stack_out:
return self.stack_out.pop()
else:
for i in range(len(self.stack_in)):
temp = self.stack_in.pop()
self.stack_out.append(temp)
return self.stack_out.pop()
def peek(self):
"""
:rtype: int
"""
res = self.pop()
self.stack_out.append(res)
return res
def empty(self):
"""
:rtype: bool
"""
return not (self.stack_in or self.stack_out)
# return (self.stack_in and self.stack_out)
# Your MyQueue object will be instantiated and called as such:
# obj = MyQueue()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.peek()
# param_4 = obj.empty()
225. 用队列实现栈
1、使用一个队列就可以实现栈的操作。
2、队列有popleft()操作,直接pop出最左边的数值。
from collections import deque
class MyStack(object):
def __init__(self):
self.queue = deque()
def push(self, x):
"""
:type x: int
:rtype: None
"""
self.queue.append(x)
def pop(self):
"""
:rtype: int
"""
if self.empty():
return None
length = len(self.queue)
for i in range(length - 1):
temp = self.queue.popleft()
self.push(temp)
return self.queue.popleft()
def top(self):
"""
:rtype: int
"""
if self.empty():
return None
return self.queue[-1]
def empty(self):
"""
:rtype: bool
"""
return not self.queue
# Your MyStack object will be instantiated and called as such:
# obj = MyStack()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.top()
# param_4 = obj.empty()