目录
前言:
方法步骤
示例
Python代码实现
225. 用队列实现栈
前言:
上一期学习了怎么去通过两个栈来实现队列,同样这一期我就来讲讲怎么去通过两个队列来实现栈的功能,一起来学习吧。(上一期链接Python数据结构-----leetcode232.用栈实现队列_灰勒塔德的博客-CSDN博客)
方法步骤
同样的,要先准备好两个空队列,分别为 queue_in , queue_tem 第一个作为数据储存的队列,第二个作为临时储存数据的队列。入栈的话就直接把数据放入queue_in 就行了,如果要出栈的话就先判断整个栈里面数据是否为空,如果不为空的话就可以进行出栈操作,先把queue_in 里面的数据依次放入queue-tem 里面,直到queue_in 只剩下最后一个数据的时候就把这个数据进行出队处理,然后就实现了出栈操作。
示例
1.入栈操作:直接对数据a,b,c,d依次入队queue_in
2.出栈操作:先把queue_in 里面的数据依次出队然后放入queue_tem里面去暂时存着,然后直到queue_in 里面剩下最后一个数据 d ,这时候对这个数据进行出队返回就行了.
3.出队完成了之后要,把queue_tem 里面的数据重新放入到queue_in 里面去,保证queue_in 不为空
以上过程基本上就实现了两个队列实现栈的操作
Python代码实现
class MyQueue(object):
def __init__(self):
'''初始化两个空栈'''
self.__stack_in = []
self.__stack_out = []
def isempty(self):
'''判断队列是否为空'''
if not self.__stack_in and not self.__stack_out:
return True
return False
def inqueue(self, data):
'''入队'''
self.__stack_in.append(data)
def dequeue(self):
'''出队'''
if self.__stack_out: # 判断栈stack_out是否空
return self.__stack_out.pop()
else:
if not self.__stack_in:
return -1 # 如果都队列为空的话就返回-1
else:
while self.__stack_in:
self.__stack_out.append(self.__stack_in.pop())
return self.__stack_out.pop()
def showqueue(self):
return self.__stack_out[::-1] + self.__stack_in
225. 用队列实现栈
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。
实现 MyStack 类:
void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。
注意:
你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。
你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
示例:
输入:
["MyStack", "push", "push", "top", "pop", "empty"]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 2, 2, false]
解释:
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // 返回 2
myStack.pop(); // 返回 2
myStack.empty(); // 返回 False
class MyStack:
def __init__(self):
self.queue1 = []
self.queue2 = []
def push(self, x: int) -> None:
self.queue1.append(x)
def pop(self) -> int:
if not self.queue1:
return -1
else:
while not len(self.queue1) == 1:
self.queue2.append(self.queue1.pop(0))
res = self.queue1.pop()
while self.queue2:
self.queue1.append(self.queue2.pop(0))
return res
def top(self) -> int:
return self.queue1[len(self.queue1) - 1]
return self.queue1[0]
def empty(self) -> bool:
return self.queue1 == []
# 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()
好了,以上就是今天的全部内容了,我们下一期再见!
分享一张壁纸: