4-7 Python数据结构常考题之栈与队列

Python工程师面试宝典 专栏收录该内容
54 篇文章 0 订阅
一、栈与队列

后进先出 VS 先进先出
1.熟练掌握用 pythonlist 或者 collections.deque()实现栈和队列
2.常考题:用栈实现队列
3.leetcode implement-queue-using-stacks

用栈实现队列图示分析:
在这里插入图片描述
代码实现:

# leetcode 第232号 用栈实现队列
from collections import deque


class Stack:
    def __init__(self):
        self.items = deque()

    def push(self, val):
        return self.items.append(val)

    def pop(self):
        return self.items.pop()

    def top(self):
        return self.items[-1]  # 返回栈顶值

    def empty(self):
        return len(self.items) == 0


class MyQueue:
    def __init__(self):
        self.s1 = Stack()
        self.s2 = Stack()

    def push(self, val):
        self.s1.push(val)

    def pop(self):
        if not self.s2.empty():
            return self.s2.pop()

        while not self.s1.empty():
            val = self.s1.pop()
            self.s2.push(val)
        return self.s2.pop()

    def peek(self):
        if not self.s2.empty():
            return self.s2.top()

        while not self.s1.empty():
            val = self.s1.pop()
            self.s2.push(val)
        return self.s2.top()

    def empty(self):
        return self.s1.empty() and self.s2.empty()


def test():
    q = MyQueue()
    q.push(1)
    q.push(2)
    q.push(3)
    print(q.pop())
    print(q.pop())
    print(q.pop())

test()
  • 0
    点赞
  • 1
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值