【实战】ACM 选手图解 LeetCode 用栈实现队列

本文通过实例解析LeetCode 232题,教你如何仅使用两个栈实现先入先出的队列,包括push、pop、peek和empty等操作。详细讲解了用栈模拟队列的思路,以及Python和Java的代码实现。
摘要由CSDN通过智能技术生成

大家好呀,我是蛋蛋。

今天用栈实现队列这道题,是考察对”栈和队列理解程度“的好题。

放心,在实际工作的时候,不是脑残十级,几乎不会提出这样奇怪的需求。

话不多说,直接开整。

b690cb61fe7a0641e88ae71c7be33fd

LeetCode 232:用栈实现队列

题意

仅使用两个栈实现先入先出队列,队列支持一般队列支持的所有操作:

  • void push(int x):将元素 x 推到队列的末尾。
  • int pop():从队列的开头移除并返回元素。
  • int peek():返回队列开头的元素。
  • boolean empty():如果队列为空,返回 true;否则,返回 false。

示例

a136f1763dc4b0004659ad76570c555

提示

  • 1 <= x <= 9
  • 最多调用 100 次 push、pop、peek 和 empty
  • 假设所有操作都是有效的(eg. 一个空的队列不会调用 pop 或者 peek 操作)

题目解析

水题,难度简单,主要考察对栈和队列的理解能力

如果对栈和队列还不熟悉,看一下下面这篇文章,某帅比写的:

**呔!“栈”住,队列!

**

仔细来看,主要涉及 4 种常规操作:

  • 入队 push
  • 出队 pop
  • 判空 empty
  • 取队首元素 peek

知道了要求,剩下就是如何用栈模拟队列。

队列是一种先入先出(FIFO)的数据结构,而栈是一种后入先出(LIFO)的数据结构,所以一个栈绝对满足不了队列的 FIFO 的特性。

比如 1 2 3,队列 1 2 3 进,应该 1 2 3 出,但是 1 2 3 进了栈,出来以后会成 3 2 1,和 1 2 3 是相反的,所以再需要一个栈,把 3 2 1 返成 1 2 3。

因此这里需要两个栈,分别是输入栈和输出栈

输入栈来反转元素的入队顺序,元素入只能从输入栈进(push)。

输出栈用来存储元素的正常顺序,元素出只能从输出栈出(pop、peek)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值