剑指offer:Python 用两个栈实现一个队列

题目描述

'''
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型
'''

思路过程

'''
首先要知道栈和队列的特点,栈是后进先出,(单向)队列是后进后出(先进先出);一个栈显然无法完成;
但是有两个栈,就可以完成,具体是:将其中一个栈先用来接收数据,另一栈来输出数据;
当第一个栈接收数据是,是按照一个个往栈底压的,先进去显然只能后出;此时我们只有再从栈顶
取一次数据,然后再存放到第二个栈,此时第一个栈的栈顶数据就变成先进的数据;那么我们对
第二个栈取值,就相当于队列的取值顺序了!
'''

在这里插入图片描述

Python实现

class Solution:
    # 实现一个队列的功能
    def __init__(self):
        self.accept_stack = []  # 先用来接收数据的栈
        self.output_stack = []  # 后用来输出的栈

    def push(self, node):  # 往第一个栈里添加元素(栈和队里再存数据是不存在区别的)
        self.accept_stack.append(node)

    def pop(self):  # 通过第二个栈,模拟从队列里取出元素
        if self.output_stack == []: # 如果输出栈是空,那么我们需要从第一个栈添加元素
            while self.accept_stack: # 只要第一个栈还有元素就要一直添加
                self.output_stack.append(self.accept_stack.pop())
        if self.output_stack != []: # 如果输出栈不为空
            return self.output_stack.pop()
        else: # 输出栈的值取空了时,这部容易忽略,如果不写,持续取时会报错
            return None


obj = Solution()
obj.push(1)
obj.push(2)
obj.push(3)
print(obj.pop()) # 1
print(obj.pop()) # 2
print(obj.pop()) # 3 取完了
print(obj.pop()) # None
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值