Python数据结构-----leetcode用队列实现栈

目录

前言:

 方法步骤

示例

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 ,这时候对这个数据进行出队返回就行了.

扫描二维码关注公众号,回复: 15645494 查看本文章

 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()

好了,以上就是今天的全部内容了,我们下一期再见!

分享一张壁纸: 

猜你喜欢

转载自blog.csdn.net/m0_73633088/article/details/130176145