代码随想录刷题学习日记

仅为个人记录复盘学习历程,解题思路来自代码随想录

代码随想录刷题笔记总结网址:
代码随想录

232.用栈实现队列

使用栈实现一个队列,完成以下功能:

push(x) -- 将一个元素放入队列的尾部。
pop() -- 从队列首部移除元素。
peek() -- 返回队列首部的元素。
empty() -- 返回队列是否为空。

关键:

使用栈来模拟队列的行为,仅仅用一个栈一定不行,所以需要两个栈一个输入栈,一个输出栈,这里要注意输入栈和输出栈的关系。

输入时,栈正常输入,而当输出时,当输出栈中有元素,则直接输出;当输出栈中没有元素,将输入栈中所有元素依次弹栈,并压栈到输出栈,结束后,由输出栈输出。(栈先进后出与队列先进先出性质相反,相当于此处用了一个栈来实现反向)

主要操作:

使用栈对队列的行为进行模拟即可

225. 用队列实现栈

使用队列实现一个人栈,完成以下功能:

push(x) -- 元素 x 入栈。

pop() -- 移除栈顶元素。

top() -- 获取栈顶元素。

empty() -- 返回栈是否为空。

关键:

使用队列来模拟栈和使用栈来模拟队列不同,原因是这是两种不同的数据结构,它们的性质不同。

使用两个队列来模拟栈时,一个作为输入输出队列,一个作为记录队列,当队列模拟弹栈时,输入输出队列将除最后一个元素外的所有元素依次加入记录队列,输入输出队列完成弹栈后,将记录队列中的所有元素复制到输入输出队列,再清空记录队列。查询栈顶元素操作类似,但在查询完后需将输入输出队列内剩余的一个元素加入到记录队列,再进行复制。

使用一个队列来模拟栈时,主要思想和两个队列模拟时一样,只是存储备份可以优化,需要备份到记录队列中的元素可以依次取出,再加入该队列的末尾,这样就以一种循环队列的方式简化了存储空间。

主要操作:

使用队列对栈的行为进行模拟即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值