栈和队列
栈: 先进后出
队列: 先进先出
都可以用列表list实现
232. 用栈实现队列
用列表list实现
class MyQueue:
def __init__(self):
self.queue = []
def push(self, x: int) -> None:
self.queue.append(x)
def pop(self) -> int:
return self.queue.pop(0)
def peek(self) -> int:
return self.queue[0] if self.queue else []
def empty(self) -> bool:
return True if self.queue == [] else False
# 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. 用队列实现栈
用列表实现
但使用insert不是一个很好的选择
class MyStack:
def __init__(self):
self.stack = []
def push(self, x: int) -> None:
self.stack.insert(0, x)
def pop(self) -> int:
return self.stack.pop(0)
def top(self) -> int:
return self.stack[0]
def empty(self) -> bool:
return self.stack == []
# 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()
collections.deque
双向队列
多了appendleft和popleft的功能
队列的实现:
from collections import deque
class MyQueue:
def __init__(self):
self.queue = deque()
def push(self, x: int) -> None:
self.queue.append(x)
def pop(self) -> int:
return self.queue.popleft()
def peek(self) -> int:
return self.queue[0]
def empty(self) -> bool:
return len(self.queue) == 0
栈的实现:
from collections import deque
class MyStack:
def __init__(self):
self.stack = deque()
def push(self, x: int) -> None:
self.stack.appendleft(x)
def pop(self) -> int:
return self.stack.popleft()
def top(self) -> int:
return self.stack[0]
def empty(self) -> bool:
return len(self.stack) == 0