首页 > 编程语言 >代码随想录算法训练营第10天 | 栈和队列 232.用栈实现队列 225.用队列实现栈

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

时间:2024-05-03 14:55:19浏览次数:34  
标签:10 出栈 队列 self 元素 随想录 pop stack

leetcode 232.用栈实现队列

题目

232.用栈实现队列
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):
实现 MyQueue 类:
void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false

解题思路

1、定义两个列表,列表1用于入栈,列表2用于出栈
2、push元素:直接使用list.append(s)向入栈列表中添加元素
3、empty:判断队列是否为空,如果入栈和出栈两个列表均为空,说明队列为空,返回True
4、pop元素:队列是先进先出
(1)如果队列为空,则pop弹出元素返回None
(2)如果队列不为空,判断出栈的列表是否为空
出栈列表不为空,直接使用pop函数从栈顶弹出元素
出栈列表为空,把入栈列表中的元素弹出到出栈列表中,再从出栈列表栈顶弹出元素
5、peek元素:
执行队列的pop操作,会把队列开头元素从出栈列表的栈顶弹出
再把弹出的元素放到出栈列表中,即可返回队列开头元素

实现代码

class MyQueue:
    def __init__(self):
        self.stack_in = []
        self.stack_out = []

    def push(self, x: int) -> None:
        self.stack_in.append(x)
    
    def pop(self) -> int:
        if self.empty():    # 如果队列为空,pop操作没有元素可以弹出,返回None
            return None
        
        if self.stack_out:  # 如果出栈中有元素,直接从栈的末尾弹出元素
            return self.stack_out.pop() # list.pop(index = -1) pop函数移除列表的一个元素(默认是最后一个元素),并返回该元素的值
        else:   # 如果出栈中没有元素,先把入栈中的元素全部弹出,插入到出栈,再从出栈的末尾弹出元素
            for i in range(len(self.stack_in)):
                self.stack_out.append(self.stack_in.pop())
            return self.stack_out.pop()

    def peek(self) -> int:
        res = self.pop()    # 从队列的开头移除并返回元素:入栈的元素全部弹出,插入到出栈中,再从出栈末尾依次弹出元素
        self.stack_out.append(res)  # 把从出栈栈顶弹出的元素再添加到出栈中
        return res  # 返回队列开头的元素

    def empty(self, x: int) -> bool:
        # 如果出栈和入栈都没有元素,则队列为空
        return not (self.stack_out or self.stack_in)    

leetcode 225.用队列实现栈

题目

225.用队列实现栈
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。
实现 MyStack 类:
void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

解题思路

实现代码


标签:10,出栈,队列,self,元素,随想录,pop,stack
From: https://www.cnblogs.com/wanglin2016/p/18171209

相关文章

  • Django Error: [WinError 10013] An attempt was made to access a socket in a way f
      D:\06softw-dev-202306\manage.pyrunserverWatchingforfilechangeswithStatReloaderPerformingsystemchecks...Systemcheckidentifiednoissues(0silenced).May03,2024-10:02:12Djangoversion3.2.18,usingsettings'MPDB.settings......
  • CPU利用率100%怎么处理?
    --查看内核节拍率[root@p4-oadmnewdb01~]#grep'CONFIG_HZ='/boot/config-4.19.90-23.32.v2101.ky10.x86_64CONFIG_HZ=250--查看不同场景的CPU时间cat/proc/stat|grep^cpu[root@p4-oadmnewdb01~]#cat/proc/stat|grep^cpucpu1597988157210022139005384242060......
  • 从0到10Wqps,大厂的智能客服平台,如何实现架构演进?
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • Codeforces 1044F DFS
    考虑到存在方案使得以\(u\)为起点还能走出原树的条件。能发现是以\(u\)为根,在原树上新添加的边只会是返祖边而不会有横叉边。这是因为如果有横叉边就肯定会在遍历到一边的点后先通过这条边走到另一边的点,就算上了这条边就不是原树了。那么考虑\((x,y)\),合法的\(u\)需要......
  • 对于 CF1107E 中 dp 状态设计的一点想法
    不太想发到洛谷讨论区,就往这里放了。我觉得现有的题解都没说明白为什么本题的状态和转移能覆盖所有情况,并且感觉也非常不自然,没见过的话感觉挺难发现这么一个东西。然而这个dp其实是可以自然地推导出来的。首先发现这个过程非常难以描述,主要原因在于很难刻画一个局面。然而,如......
  • rt1052点亮0.96寸spi屏
    一,前言目的是用rgb屏,但是rgb屏硬件还没准备好,所以要先学习下lvgl上位机,但是学习完要烧录到屏中看效果,所以我今天就先点亮spi屏。找了之前stm32时候点亮频的lcd驱动进行的移植,cs我不是gpio控制的,所以注释了2行,看起来无影响。二,说明0.96存spi驱动的LCD屏ST7735S驱动成功,已经备份......
  • 站立会议和燃尽图10
    站立会议和燃尽图10一、小组情况组长:李宏威组员:董泽豪队名:隐约雷名二、Scrum例会时间:2024年4月29日出席人员:李宏威,董泽豪要求1工作照片要求2时间跨度2024年4月29日7:00至2024年4月29日7:20共计20分钟要求3地点石家庄铁道大学要求4立会内容包括:(1)未开始......
  • PC-100垂直拉制仪使用指南
    序言  现在大部分的实验室配置的都是水平拉制仪(大部分是Sutter的P-97和P-1000)的普及,很多新的实验室也没有人配备垂直拉制仪,但是垂直拉制仪在制备锥度较长的吸附针呀、注射病毒这种用途时,比水平拉制仪更具优势,有时候,在水平拉制仪出故障或者比较急时,一些实验室也会使用垂直拉制仪......
  • linux10-echo&重定向符&tail
    linux10-echo&重定向符&tailecho在终端输出语句echo"HelloWorld"echo输出命令#此处pwd被当做文本输出echopwd通过反引号``,输出pwd执行内容echo`pwd`重定向符>将左侧命令的结果,覆盖写入到右侧指定的文件中>>将左侧命令的结果,追加写入到右侧指......
  • docker之旅 10.容器实战-部署tars微服务框架
    参考地址:https://doc.tarsyun.com/#/installation/docker.mdhttps://github.com/TarsCloud/Tarshttps://hub.docker.com/r/tarscloud/base-deploy https://tarscloud.gitbook.io/tarsdocs/kuang-jia-bu-shu/docker 前提:假设你已经安装好了docker,docker-compose。如......