用队列实现栈和用栈实现队列

之前面试一直不刷题,因为感觉工作中用不到,为了卷而卷,这是有点知名度的力扣面试题,学撤销重做的时候想起,之前的面试中被问过两三次了,紧张了,几分钟都构思不到, 有点兴趣还是记录一下。


队列实现栈

题目

使用队列实现栈的下列操作:

push(x) – 元素 x 入栈
pop() – 移除栈顶元素
top() – 获取栈顶元素
empty() – 返回栈是否为空

思路

我们用两个队列A、B来模拟栈,这里将A看作是栈,B看作是实现栈操作所需的临时队列。

  1. 入栈:直接将元素添加进队列

  2. 出栈:将A队列中队尾元素以外的都挪到B队列中,使得栈顶元素能够被取出。然后再将A的末尾元素"出栈"。 然后,将AB的引用交换, 这样A更新之后的内容看起来就像出栈。

在这里插入图片描述

  1. 返回栈顶元素:和出栈同理,只是在返回A的末尾元素后, A的末尾元素也得进入B队列。

  2. 判断栈是否为空:如果AB同时为空,则为空栈。

栈实现队列

用栈来实现队列需要使用两个栈:一个栈用于入列操作,另一个栈用于出列操作。具体实现如下:

入列操作:将元素压入栈1中。

出列操作:如果栈2不为空,则弹出栈顶元素;如果栈2为空,则将栈1中的元素逐个弹出并压入栈2中,然后弹出栈2的栈顶元素。

判断队列是否为空:当栈1和栈2都为空时,队列为空。

因为保证出栈的顺序与入栈相同就行了,而将一个栈的元素挨个移动到另个栈,然后另个栈出栈的顺序就能保证与第一个栈的入栈顺序相同了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值