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

这篇博客主要探讨如何使用Java中的栈和队列来实现彼此的功能。作者详细分析了232题(用栈实现队列)和225题(用队列实现栈)的解题思路,强调了在实现过程中需要注意的数据结构操作顺序,并分享了在编程实践中的错误与教训,旨在加深对栈和队列理解。

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

今天是打基础的一天,了解队列和栈的实现。
上次学习这块记忆犹新,只要打基础,那天的我肯定是沮丧的,总会是说的时候都懂,写的时候不知道从哪里下手,看看这次会遇到什么“艰难险阻”及时记录下来。哈哈

Java 中 我总是不清楚为什么queue的crud 方法名字 != stack的,后来才发现,原来它俩都不是一个子类

  • Queue 是一个Intferface, 说明它的实现必须要用到one of the implementing classes: 一般我们是用Linked List 或者是arrayqueue, 据说更快
    Queue queue = new LinkedList<>()
    Offer & poll & peek

  • Stack 是一个具体类。 由Deque接口实现, Deque stack = new ArrayDeque();
    或者最简单版的: Stack stack = new Stack<>();

push & pop & peek

232.用栈实现队列
毛坯版本的逻辑解释:
use stack to realize queue
常规的暴力解法:
逻辑上的问题:
放进stack的时候,就要保证是以一个queue的顺序放入的,这样之后的peek 和 pop 就正常做即可
我是用的stack 类实现
如果用ArrayDeque的话,就是要注意method变成了:pollFirst(). offerFirst()
代码上:我又又又又忘记写else了 导致第一个if之后是没有return的, 程序就又跑到下面去进行了操作去了TT

平均复杂度为1的写法:也是我想象中自己的写法:
错误的想法是:
当我push 的时候, 会先push到spare的stack里,只有在准备pop出来的时候,再去把他们全部都push到结果要显示的stack里, 这样数据只用先进入spare “备胎栈”在进入结果栈再pop出去。
错误点:
但是没有考虑到如果再加进去新得int时,依旧加到spare栈中,但是pop得时候,就不用把所有数据全部拿出来,直接pop现在正在res stack里得数值如果他有的话,这样数据只会从spare到rresult再出去, 省去了每次push 得时候都要把数据拿出来得不方便
平均解法为1的操作

225.用队列实现栈
TT 完全没有头绪
看了解答, 分为2种情况
1: 经常有push, 这样的话 最好让push中不要做太多的运算
先直接push在queue中, 在poll 中再进行整理,具体实现如下:
把除了最后一个的数都拿出来放到另一个备胎queue中,然后在把结果弹出,之后再把2个queue互换位置,就像是又回到了原貌。

2:经常有pop , vice versa
那就再每次push的时候就要保证存入的时候就已经是正确的格式,这样pop就可以直接拿出来,至于怎么存储:
保证有一个stack 一直是空的为了放数据,一旦放进去,就要立马把备胎队列里的值拿过来,在一起放回备胎队列, 这样再进行pop. peek。

push的时候就准备好!

总结来说,虽然是简单题,但是也需要通过这2道题了解如何运用规定的结构以什么样的顺序去实现。以让我们更好的了解stack 和 queue
(写了小半天的我悄然泪下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值