题目要求用队列来实现栈。
我使用Python语言中的 queue.Queue:
其中没有获取栈顶元素的方法,但是我们可以使用先pop()后push(x)的方法来模拟top()。
Python 队列(Queue)用法# 介绍了Queue的一些方法
代码实现
一个队列-》栈
from queue import Queue
class MyStack(object):
def __init__(self):
"""
Initialize your data structure here.
"""
#q1作为进栈出栈,q2作为中转站
self.q=Queue()
def push(self, x):
"""
Push element x onto stack.
:type x: int
:rtype: void
"""
self.q.put(x)
def pop(self):
"""
Removes the element on top of the stack and returns that element.
:rtype: int
"""
size=self.q.qsize()
for i in range(size-1):# 关键在此
self.q.put(self.q.get())
return self.q.get()
def top(self):
"""
Get the top element.
:rtype: int
"""
size=self.q.qsize()
for i in range(size-1):
self.q.put(self.q.get())
t=self.q.get()
self.q.put(t)
return t
def empty(self):
"""
Returns whether the stack is empty.
:rtype: bool
"""
return self.q.empty()
其他方法
[LeetCode] Implement Stack using Queues 用队列来实现栈 # 介绍了两种方法
这里不详细说明了,只说简单的思路。
- 两个队列-》栈
多维护一个队列,存储最后进来的数,在top()或者pop()时可以避免一次队列的循环。
- 每次push的时候把现有队列翻转,模拟栈