美文网首页
两个栈实现队列,两个队列实现栈python

两个栈实现队列,两个队列实现栈python

作者: 钢筋铁骨 | 来源:发表于2020-04-14 16:44 被阅读0次

练习

# 两个栈做一个队列,input:1,2,3,pop()时的顺序是1,2,3
class TwoStackOneQueue(object):
    def __init__(self):
        # 先进后出,相当于只能pop(),我操作这两个stack时,只允许使用pop()方法
        self.stack1 = []
        self.stack2 = []

    def push(self, node):
        self.stack1.append(node)

    # 队列的pop,先进先出,此方法相当于pop(0)
    def pop(self):
        if len(self.stack1) == 0 and len(self.stack2) == 0:
            print ("empty from my list")
            return None
        elif len(self.stack2) == 0:
            # 把stack1里的数据灌到stack2里,相当于两次pop操作,次序又回来了
            while len(self.stack1) > 0:
                self.stack2.append(self.stack1.pop())
            return self.stack2.pop()
        else:
            return self.stack2.pop()


# 两个队列实现栈的功能,输入1,2,3;输出3,2,1
class TwoQueueOneStack(object):
    def __init__(self):
        # 队列,先进先出,只允许调用pop(0)方法
        self.q1 = []
        self.q2 = []

    def push(self, node):
        self.q1.append(node)

    # 栈的pop,后进先出,相当于pop()
    def pop(self):
        if len(self.q1) == 0:
            print ("empty from my stack")
        # 如果q1只剩下一个元素时,肯定是最后进来的元素,弹出就对了。其余元素全都放到q2中存上
        if len(self.q1) == 1:
            return self.q1.pop(0)

        while len(self.q1) > 1:
            self.q2.append(self.q1.pop(0))
        res = self.q1.pop(0) # q1中剩下的那个最新的元素
        self.q1, self.q2 = self.q2, self.q1
        return res


if __name__ == '__main__':
    my_queue = TwoStackOneQueue()
    my_queue.push(1)
    my_queue.push(2)
    my_queue.push(3)
    print (my_queue.pop())
    print (my_queue.pop())
    print (my_queue.pop())
    print ('----------------------------------------------')
    my_stack = TwoQueueOneStack()
    my_stack.push(1)
    my_stack.push(2)
    my_stack.push(3)
    print(my_stack.pop())
    print(my_stack.pop())
    print(my_stack.pop())

相关文章

网友评论

      本文标题:两个栈实现队列,两个队列实现栈python

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