理论基础
Python中可以用list来模拟栈和队列:
- 栈(stack): 只能在一端进行数据操作,遵循后进先出(LIFO)原则
- 队列(queue): 可以在两端进行数据操作,遵循先进先出(FIFO)原则,出队列的一端称为队首,入队列的一端称为队尾
添加:队列和栈都是从尾部/顶部添加元素:则直接使用append()即可
删除:list的pop函数,栈顶:list.pop(),队列头部:list.pop(0)
获取长度:len
获取栈顶元素:list[-1]
获取队列头部元素: list[0]
原则:只能操作获取 栈顶 和 队列头部
用栈实现队列
相关题目
视频讲解
重点分析
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 not self.stack_out:
length = len(self.stack_in)
for _ in range(length):
self.stack_out.append(self.stack_in.pop())
return self.stack_out.pop()
def peek(self):
"""
:rtype: int
"""
if not self.stack_out:
length = len(self.stack_in)
for _ in range(length):
self.stack_out.append(self.stack_in.pop())
res = self.stack_out[-1]
return res
def empty(self):
"""
:rtype: bool
"""
if (not self.stack_in) and (not self.stack_out):
return True
return False
用队列实现栈
相关题目
视频讲解
重点分析
class MyStack(object):
def __init__(self):
self.queque_main = []
self.queque_tmp = []
def push(self, x):
"""
:type x: int
:rtype: None
"""
self.queque_main.append(x)
def pop(self):
"""
:rtype: int
"""
length = len(self.queque_main)
for _ in range(length-1):
self.queque_tmp.append(self.queque_main.pop(0))
res = self.queque_main.pop(0)
for _ in range(length-1):
self.queque_main.append(self.queque_tmp.pop(0))
return res
def top(self):
"""
:rtype: int
"""
length = len(self.queque_main)
for _ in range(length-1):
self.queque_tmp.append(self.queque_main.pop(0))
res = self.queque_main[0]
self.queque_tmp.append(self.queque_main.pop(0))
for _ in range(length):
self.queque_main.append(self.queque_tmp.pop(0))
return res
def empty(self):
"""
:rtype: bool
"""
if self.queque_main:
return False
return True