美文网首页
05_两个栈实现一个队列【python】

05_两个栈实现一个队列【python】

作者: NWPU_HaiboWu | 来源:发表于2019-08-12 15:55 被阅读0次

1.题目描述

题目一:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
题目二:用两个队列来实现一个栈,完成队列的Push和Pop操作。 队列中的元素为int类型。

2.思路分析

【题目一】
题目一很直白,栈的先入后出,来两次,不就成队列了。
入栈:直接进A栈
出栈:首先判断B栈是否有元素,有就直接输出
若没有,就将A栈的元素全部出栈再进B栈,再输出

【题目二】
题目二,两个队列如果按常规操作是肯定没法产生栈的效果的
入队:将新元素存入不为空的队列
出队:找到不为空的队列,出队进第二个队列,直至只有一个元素,输出该元素

特殊:需要考虑两个都为空的情况,直接输出None

3.代码

【题目一】两个栈实现队列

class Solution:
    def __init__(self):
        self.stack1=[]
        self.stack2=[]

    def push(self,node):
        #入栈,直接往A栈存
        self.stack1.append(node)

    def pop(self):
        #出栈,如果B有元素,直接输出
        #如果,如果A只有元素,A出栈进B栈,再输出
        if len(self.stack1)==0 and len(self.stack2)==0:
            return None
        if len(self.stack2)>0:
            return self.stack2.pop()
        elif len(self.stack1)>1:
            while len(self.stack1):
                self.stack2.append(self.stack1.pop())
            return  self.stack2.pop()

【题目二】两个队列实现一个栈

class Solution:
    def __init__(self):
        self.queue1=[]
        self.queue2=[]

    def push(self,node):
        #选择一个不为空的队列入队
        if len(self.queue1)>0:
            self.queue1.append(node)
        elif len(self.queue2)>0:
            self.queue2.append(node)
        else:
            self.queue1.append(node)

    def pop(self):
        """将有元素的队列出队,直至只有一个元素"""
        #如果都是空
        if len(self.queue1)<1 and len(self.queue2)<1:
            return None
        if len(self.queue1)>0:
            while len(self.queue1)>1:
                self.queue2.append(self.queue1.pop(0))
            return self.queue1.pop(0)
        else:
            while len(self.queue2)>1:
                self.queue1.append(self.queue2.pop(0))
            return self.queue2.pop(0)


if __name__=="__main__":
    ss=Solution()

    ss.push(1)
    ss.push(2)
    print(ss.pop())
    ss.push(3)
    ss.push(4)
    ss.push(5)

4.知识点

理解list中的内置函数pop()的真正意义:

  • pop(0),输出list中的首元素,其意义就是队列的效果
  • pop()/pop(-1),输出list中的末尾元素,其意义就是栈的效果

相关文章

网友评论

      本文标题:05_两个栈实现一个队列【python】

      本文链接:https://www.haomeiwen.com/subject/teuujctx.html