题目要求用队列来实现栈。
我使用Python语言中的 queue.Queue:
image.png
其中没有获取栈顶元素的方法,但是我们可以使用先pop()后push(x)的方法来模拟top()。
Python 队列(Queue)用法# 介绍了Queue的一些方法

代码实现

一个队列-》栈

  1. from queue import Queue
  2. class MyStack(object):
  3. def __init__(self):
  4. """
  5. Initialize your data structure here.
  6. """
  7. #q1作为进栈出栈,q2作为中转站
  8. self.q=Queue()
  9. def push(self, x):
  10. """
  11. Push element x onto stack.
  12. :type x: int
  13. :rtype: void
  14. """
  15. self.q.put(x)
  16. def pop(self):
  17. """
  18. Removes the element on top of the stack and returns that element.
  19. :rtype: int
  20. """
  21. size=self.q.qsize()
  22. for i in range(size-1):# 关键在此
  23. self.q.put(self.q.get())
  24. return self.q.get()
  25. def top(self):
  26. """
  27. Get the top element.
  28. :rtype: int
  29. """
  30. size=self.q.qsize()
  31. for i in range(size-1):
  32. self.q.put(self.q.get())
  33. t=self.q.get()
  34. self.q.put(t)
  35. return t
  36. def empty(self):
  37. """
  38. Returns whether the stack is empty.
  39. :rtype: bool
  40. """
  41. return self.q.empty()

其他方法

[LeetCode] Implement Stack using Queues 用队列来实现栈 # 介绍了两种方法
这里不详细说明了,只说简单的思路。

  • 两个队列-》栈

多维护一个队列,存储最后进来的数,在top()或者pop()时可以避免一次队列的循环。

  • 每次push的时候把现有队列翻转,模拟栈