栈与队列1
今天开始栈与队列!
232.用栈实现队列
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):
实现 MyQueue 类:
- void push(int x) 将元素 x 推到队列的末尾
- int pop() 从队列的开头移除并返回元素
- int peek() 返回队列开头的元素
- boolean empty() 如果队列为空,返回 true ;否则,返回 false
class MyQueue:
def __init__(self):
self.stackA = []
self.stackB = []
def push(self, x: int) -> None:
self.stackA.append(x)
def pop(self) -> int:
if self.stackB:
return self.stackB.pop()
else:
for i in range(len(self.stackA)):
self.stackB.append(self.stackA.pop())
return self.stackB.pop()
def peek(self) -> int:
if self.stackB:
ans = self.stackB.pop()
self.stackB.append(ans)
return ans
else:
for i in range(len(self.stackA)):
self.stackB.append(self.stackA.pop())
ans = self.stackB.pop()
self.stackB.append(ans)
return ans
def empty(self) -> bool:
return not (self.stackA or self.stackB)
# 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()
复用pop()
class MyQueue:
def __init__(self):
self.stackA = []
self.stackB = []
def push(self, x: int) -> None:
self.stackA.append(x)
def pop(self) -> int:
if not self.stackB :
for i in range(len(self.stackA)):
self.stackB.append(self.stackA.pop())
return self.stackB.pop()
def peek(self) -> int:
ans = self.pop()
ans = self.stackB.pop()
self.stackB.append(ans)
return ans
def empty(self) -> bool:
return not (self.stackA or self.stackB)
# 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. 用队列实现栈
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。
实现 MyStack 类:
- void push(int x) 将元素 x 压入栈顶。
- int pop() 移除并返回栈顶元素。
- int top() 返回栈顶元素。
- boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。
可以用两个队列来做,另一个队列用来做备份而已,也可以只用一个队列来做,区别在于pop()的时候,需要把队列前n-1个元素pop到队列后面,这样才能pop出栈顶元素
class MyStack:
def __init__(self):
self.que = deque()
def push(self, x: int) -> None:
self.que.append(x)
def pop(self) -> int:
for i in range(len(self.que)-1):
self.que.append(self.que.popleft())
return self.que.popleft()
def top(self) -> int:
return self.que[-1]
def empty(self) -> bool:
return not self.que
# 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()
今日总共花了2个小时,主要是第二道题,我对python的deque不是很熟悉。