用栈模拟队列和队列模拟栈

Posted nxrs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用栈模拟队列和队列模拟栈相关的知识,希望对你有一定的参考价值。

 栈 先进后出(FILO)

队列 先进先出(FIFO)

class MyQueue:     # 两栈模拟队列
    def __init__(self):
        self.input = []
        self.output = []
  #进队列
    def push(self, x):
        self.input.append(x)
  #出队列
    def pop(self):
        self.peek()
        return self.output.pop()
def peek(self): if not self.output: #output为空时,将input中的数倒入output while self.input: self.output.append(self.input.pop()) return self.output[-1] #返回队列顶端的数 def is_empty(self): return not self.output and not self.input obj = MyQueue() obj.push(1) obj.push(2) obj.push(3) # peek = obj.peek() num = obj.pop() print(num)

 

class MyStack:   # 用两个队列模拟栈

    def __init__(self):
        self.s1 = []
        self.s2 = []
        self.num = 0  # 标志队列元素

    def push(self, x):
        self.s1.append(x)
        self.num = x

    def pop(self):
        if self.s2:
            for _ in range(len(self.s2)-1):
                self.num = self.s2.pop(0)
                self.s1.append(self.num)
            return self.s2.pop()
        else:
            for _ in range(len(self.s1)-1):
                self.num = self.s1.pop(0)
                self.s2.append(self.num)
            return self.s1.pop()

    def top(self):
        return self.num

    def is_empty(self):
        return not self.s1 and not self.s2

 

以上是关于用栈模拟队列和队列模拟栈的主要内容,如果未能解决你的问题,请参考以下文章

用栈实现队列

用有限个栈模拟常数效率操作的队列

全栈模拟入队的实现原理有一定难度详细解析

232 Implement Queue using Stacks 用栈来实现队列

栈模拟队列 队列模拟栈

剑指offer.用两个栈实现队列