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

 栈 先进后出(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

 

posted @ 2019-04-13 16:08  飞蝎儿  阅读(385)  评论(0编辑  收藏  举报