1, 题目
使用队列实现栈的下列操作:
push(x) -- 元素 x 入栈pop() -- 移除栈顶元素top() -- 获取栈顶元素empty() -- 返回栈是否为空
注意:
你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-stack-using-queues
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2, 算法
class MyStack() {/** Initialize your data structure here. */var main_queue = scala.collection.mutable.Queue[Int]()var aux_queue = scala.collection.mutable.Queue[Int]()var t: Int = 0/** Push element x onto stack. */def push(x: Int): Unit = {main_queue.enqueue(x)t = x}/** Removes the element on top of the stack and returns that element. */def pop(): Int = {while (main_queue.size > 1) {if (main_queue.size == 2) {t = main_queue.front}aux_queue.enqueue(main_queue.dequeue())}val p = main_queue.dequeue()val tmp = main_queuemain_queue = aux_queueaux_queue = tmpp}/** Get the top element. */def top(): Int = {t}/** Returns whether the stack is empty. */def empty(): Boolean = {main_queue.isEmpty}}
import queueclass MyStack:def __init__(self):"""Initialize your data structure here."""self.t = 0self.main_queue = queue.Queue()self.aux_queue = queue.Queue()def push(self, x: int) -> None:"""Push element x onto stack."""self.t = xself.main_queue.put(x)def pop(self) -> int:"""Removes the element on top of the stack and returns that element."""while self.main_queue.qsize() > 1:if self.main_queue.qsize() == 2:self.t = self.main_queue.get()self.aux_queue.put(self.t)else:self.aux_queue.put(self.main_queue.get())tmp = self.main_queue.get()self.main_queue, self.aux_queue = self.aux_queue, self.main_queuereturn tmpdef top(self) -> int:"""Get the top element."""return self.tdef empty(self) -> bool:"""Returns whether the stack is empty."""if self.main_queue.qsize()!=0:return Falseelse:return True
