用栈实现队列

用栈实现队列-力扣

思路

  • 需要两个栈,输入栈和输出栈
  • push时,数据放入输入栈
  • pop时,若输出栈为空,则把输入栈数据全部导入到输出栈,再从输出栈弹出;若输出栈不为空,直接从输出栈弹出。
  • 判断队列是否为空:若输入栈和输出栈都为空,则队列为空
  • peek()和pop()功能类似,可以考虑抽象一部分公共操作.
  • 注意:做项目时,功能相近的函数要抽象出来,不要直接复制粘贴,不然很容易出问题。
  • 注意:pop时,若输出栈为空,需要先判断stack_in是否有值,用while stack_in。
class MyQueue:

    def __init__(self):
        #in是输入栈,out是输出栈
        self.stack_in=[]
        self.stack_out=[]


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


    def pop(self) -> int:
        if self.stack_out:
            #输出栈有值,直接弹出栈顶元素
            return self.stack_out.pop()
        else:
            #输出栈为空,先把输入栈元素都加入输出栈,再弹出输出栈栈顶元素
            while self.stack_in:
                self.stack_out.append(self.stack_in.pop())
            return self.stack_out.pop()


    def peek(self) -> int:
        #复用pop
        ele=self.pop()
        #再把栈顶元素放回输出栈
        self.stack_out.append(ele)
        return ele


    def empty(self) -> bool:
        #输入栈和输出栈都为空,则队列为空
        return (not self.stack_in) and (not self.stack_out)



# 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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值