算法训练营

文章介绍了如何使用栈和队列的数据结构,分别在Python中实现队列和栈功能。通过MyQueue类用两个栈模拟队列,以及MyStack类用两个队列实现栈,展示了简单的编程技巧和时间/空间复杂度分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码随想录算法训练营|232.用栈实现队列;225. 用队列实现栈

232.用栈实现队列

题目链接: 232.用栈实现队列
文档讲解: 代码随想录
题目难度:简单

思路:两个栈实现队列
时间复杂度:O(n);空间复杂度:O(n)
下面展示 代码

class MyQueue:

    # 使用list底层实现
    def __init__(self):
        self.input = []
        self.output = []

    def push(self, x: int) -> None:
        self.input.append(x)

    def pop(self) -> int:
        if self.empty():
            return None
        else:
            if self.output:
                return self.output.pop()
            else:
                for i in range(len(self.input)):
                    self.output.append(self.input.pop())
                return self.output.pop()

    def peek(self) -> int:
        ans = self.pop()
        self.output.append(ans)
        return ans

    def empty(self) -> bool:
        if self.input or self.output:
            return False
        else:
            return True


# Your MyQueue object will be instantiated and called as such:
# obj = MyQueue()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.peek()
# param_4 = obj.empty()

225. 用队列实现栈

题目链接: 225. 用队列实现栈
文档讲解: 代码随想录
题目难度:简单
思路:两个队列,一个队列用于临时存储
代码如下

from collections import deque
class MyStack:
    # 两个队列实现
    # 队列语法:
    # 加入:que.append(x)  
    # 获取即将出队的元素:que[0] 
    # 获取队尾的元素:que[-1] 
    # 队列长度 len(que)
    # 删除即将出队的元素:que.popleft()    先进来的在左边
    def __init__(self):
        self.din = deque()
        self.dout = deque()

    def push(self, x: int) -> None:
        self.din.append(x)

    def pop(self) -> int:
        if self.empty():
            return None
        else:
            for i in range(len(self.din) - 1):
                # 除最后一个元素外的所有元素
                self.dout.append(self.din.popleft())
            ans = self.din.popleft()
            self.din, self.dout = self.dout, self.din   # 交换din和dout
            return ans

    def top(self) -> int:
        if self.empty():
            return None
        else:
            return self.din[-1]


    def empty(self) -> bool:
        if len(self.din) == 0:
            return True
        else:
            return False



# Your MyStack object will be instantiated and called as such:
# obj = MyStack()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.top()
# param_4 = obj.empty()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值