- 用队列实现栈
使用队列实现栈的下列操作:
push(x) – 元素 x 入栈
pop() – 移除栈顶元素
top() – 获取栈顶元素
empty() – 返回栈是否为空
注意:
你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。
你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)。
分析:
队列特性–FIFO
栈特性–LIFO
不变:empty()
变:
当队列push 进一个元素时候,这个元素不再是对尾,而要改变成栈顶
方法一:单队列反转:
每插入一个元素,就将原来队列中的元素重新push在新元素的后面,出队时,取队头即可。
But queue没有append左边的方法
所以换个LC上比较通用的方法-保持C为栈顶,反转队列里剩余的n-1个元素
def push(self, x):
"""
Push element x onto stack.
:type x: int
:rtype: None
"""
self.queue.append(x)
queueLen=len(self.queue)
while queueLen>1:
#注意这里使用append 和 pop来进行反转
self.queue.append(self.queue.pop(0))
queueLen-=1