代码随想录27期|Python|Day10|队列与栈的基础|232.用栈实现队列|225. 用队列实现栈

队列和栈基础知识

OMG本人学C的时候就没搞懂,现在看C++看懂了一点,总结一下:

1、所有元素必须符合先进后出规则;

2、所以栈不提供走访功能,也不提供迭代器(iterator);

3、STL中栈往往不被归类为容器,而被归类为container adapter(容器适配器)。栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能);

4、常用的SGI STL,如果没有指定底层实现的话,默认是以deque为缺省情况下栈的底层结构。(封住一端)。

队列

1、队列中先进先出的数据结构;

2、同样不允许有遍历行为,不提供迭代器;

3、SGI STL中队列一样是以deque为缺省情况下的底部结构;

4、STL 队列也不被归类为容器,而被归类为container adapter( 容器适配器)。

232. 用栈实现队列

可以把队列看成是两头开的栈,也可以理解是两个背靠背的栈,在输入输出过程完成了一次copy元素。

class MyQueue(object):

    def __init__(self):
        self.in_stack = []
        self.out_stack = []

    def push(self, x):
        """
        :type x: int
        :rtype: None
        """
        self.in_stack.append(x)


    def pop(self):
        """
        :rtype: int
        """
        if self.empty():
            return None
        if self.out_stack:
            return self.out_stack.pop()
        else:
            for i in range(len(self.in_stack)):
                self.out_stack.append(self.in_stack.pop())
            return self.out_stack.pop()


    def peek(self):
        """
        :rtype: int
        """
        ans = self.pop()
        self.out_stack.append(ans)
        return ans


    def empty(self):
        """
        :rtype: bool
        """
        return not (self.in_stack or self.out_stack)

 225. 用队列实现栈

class MyStack(object):

    def __init__(self):
        self.que = deque()

    def push(self, x):
        """
        :type x: int
        :rtype: None
        """
        self.que.append(x)


    def pop(self):
        """
        :rtype: int
        """
        # 只需要把全部的弹出之后再接过来
        if self.empty():
            return None
        else:
            for i in range(len(self.que) - 1):
                self.que.append(self.que.popleft())
        return self.que.popleft()

    def top(self):
        """
        :rtype: int
        """
        if self.empty():
            return None
        else:
            return self.que[-1]


    def empty(self):
        """
        :rtype: bool
        """
        return not self.que

 第10天结束🎉

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值