首先先看看栈与队列的基本概念,
找到了一篇csdn上的博客,关于python中的栈与队列:python的队列和栈_put_nowait() raise full-CSDN博客
接着是今天的两道题,分别是用两个栈实现队列和两个队列去实现栈,我觉得基本思路是一样的,一个用来存储数据,另一个用来暂时存放和调换元素顺序,因为你不能改变原先栈(后进先出)和队列(先进先出)的出入栈顺序
第一题:232. 用栈实现队列
class MyQueue:
def __init__(self):
## 设计两个list实现先入先出
## 标准的栈操作通常包括以下几种:
## 压入(Push):将元素添加到栈的顶部。新元素成为栈的新顶部。
## 弹出(Pop):从栈的顶部移除元素。通常是移除并返回栈顶的元素。
## 获取栈顶元素(Top / Peek):获取栈顶的元素,但不将其从栈中移除。
## 检查栈是否为空(Empty):检查栈中是否存在任何元素。如果栈为空,则返回真(True);否则返回假(False)。
self.list1 = []
self.list2 = []
def push(self, x: int) -> None:
self.list1.append(x)
def pop(self) -> int:
while(self.list1):
self.list2.append(self.list1.pop())
a = self.list2.pop()
while(self.list2):
self.list1.append(self.list2.pop())
return a
def peek(self) -> int:
while(self.list1):
self.list2.append(self.list1.pop())
a = self.list2[-1]
while(self.list2):
self.list1.append(self.list2.pop())
return a
def empty(self) -> bool:
if self.list1:
return False
else:
return True
# 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. 用队列实现栈
from queue import Queue
class MyStack:
def __init__(self):
## 初始化两个队列
self.q1 = Queue()
self.q2 = Queue()
def push(self, x: int) -> None:
self.q2.put(x)
while not self.q1.empty():
self.q2.put(self.q1.get())
self.q1, self.q2 = self.q2, self.q1
def pop(self) -> int:
return self.q1.get()
def top(self) -> int:
return self.q1.queue[0]
def empty(self) -> bool:
return self.q1.empty()
# 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()
这样就用两个队列去实现了栈,但实际可以只用一个队列
import queue
class MyStack:
def __init__(self):
self.q = queue.Queue()
def push(self, x: int) -> None:
self.q.put(x)
def pop(self) -> int:
for _ in range(self.q.qsize() - 1):
self.q.put(self.q.get())
return self.q.get()
def top(self) -> int:
top_element = None
for _ in range(self.q.qsize()):
top_element = self.q.get()
self.q.put(top_element)
return top_element
def empty(self) -> bool:
return self.q.empty()
因为队列和栈性质不同,队列可以用一个就实现!
栈和队列作为两种数据结构,还是需要好好掌握~