通过队列实现栈OR通过栈实现队列

本文探讨了如何利用两个队列实现一个栈的功能,以及如何通过两个栈来实现一个队列的操作。详细介绍了每种情况下元素的出入顺序,并强调了实现过程中线程安全的重要性。

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

这是面试的时候碰到了一个问题,今天整理下思路,实现的代码整理好之后会放在文末。

问题的关键点在于顺序,队列是先进先出的,栈是后进先出的,也就是先进后出。所以他们的放入顺序相同,取出顺序是完全相反的。 另外还需要注意,队列的取出存入操作,不会改变队列中元素的放置顺序,而栈取出再存入,会将栈中元素的排序倒置。

两个队列实现一个栈

因为队列是先进先出的,所以队列的末尾元素就是栈要取出的首元素。

  1. 首先判断两个队列是否都为空,若为空,将所有元素放入队列1(当然,队列2也可以)。若不为空,将所有元素放入非空队列中。
  2. 进行出栈操作时,将非空队列的元素放入依次放入空队列中,将最后的尾元素保留并取出。

两个栈实现一个队列

因为栈是先进后出(后进先出)的,所以栈的末尾元素就是栈要取出的首元素。

  1. 首先判断两个栈是否为空,若为空,将所有元素放入栈1(当然,栈2也可以)。
  2. 此时,我们需要取出元素时,将栈1的元素全部放入栈2中,因为栈的后进先出的特点,由栈1出栈元素放入栈2后,栈2的出栈操作顺序即为队列元素的取出顺序。所以,可以将使用栈1负责添加元素,栈2负责取出元素。每次栈2为空时,将栈1元素全部放入栈2,继续取出操作即可。

最后

在进行操作的时候,我们需要保证操作的安全性,所以两个队列或者两个栈,要是线程安全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值