首页 > 试题广场 >

用两个栈实现队列

[编程题]用两个栈实现队列
  • 热度指数:1020704 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。

数据范围:
要求:存储n个元素的空间复杂度为  ,插入与删除的时间复杂度都是 
示例1

输入

["PSH1","PSH2","POP","POP"]

输出

1,2

说明

"PSH1":代表将1插入队列尾部
"PSH2":代表将2插入队列尾部
"POP“:代表删除一个元素,先进先出=>返回1
"POP“:代表删除一个元素,先进先出=>返回2   
示例2

输入

["PSH2","POP","PSH1","POP"]

输出

2,1
头像 Maokt
发表于 2021-06-30 15:17:51
精华题解 算法思想:双栈(此题已明确解题方法即双栈) 解题思路: 借助栈的先进后出规则模拟实现队列的先进先出 1、当插入时,直接插入 stack1 2、当弹出时,当 stack2 不为空,弹出 stack2 栈顶元素,如果 stack2 为空,将 stack1 中的全部数逐个出栈入栈 展开全文
头像 牛客题解官
发表于 2022-04-22 12:14:00
精华题解 题目主要信息: 队列:元素不可直接下标访问,先进先出 栈:元素不可直接访问,先进后出 使用两个栈模拟在队列中插入n个元素和弹出n个元素,顺序不定,但是保证操作都是合法的 举一反三: 学习完本题的思路你可以解决如下题目: BM43. 包含min函数的栈 方法:双栈法(推荐使用) 知识点1:栈 栈是 展开全文
头像 堆栈哲学
发表于 2021-07-15 15:27:20
精华题解 解法一:队列模拟 栈是后进先出,队列是先进先出,想要用栈实现队列,需要把一个栈中的元素挨个pop()出来,再push到另一个栈中。 上图中,我们将栈a中的数据全部pop()出来,再放入栈b中,经过这么一番操作后,栈b中的元素顺序就变成先进先出的顺序了,所以栈b中的顺序跟队列顺序一样了。解法一、解 展开全文
头像 牛客500979850号
发表于 2021-07-15 16:47:33
精华题解 解题方法: 如下图所示,我们使用将push操作放到stack1中,将pop操作放到stack2中,当pop操作且stack2为空时,将stack1中所有元素转入stack2中即可。图解如下: 代码如下: class Solution { public: void push(int n 展开全文
头像 2019113913
发表于 2021-07-18 16:10:01
精华题解 题意思路: 输入:["PSH1","PSH2","POP","POP"]返回:1,2解析:"PSH1":代表将1插入队列尾部"PSH2":代表将2插入队列尾部"POP“: 展开全文
头像 Peterliang
发表于 2021-07-18 20:23:05
精华题解 题意分析 需要我们使用两个栈来模拟队列的操作,比如入队和出队的操作。 前置知识,首先,我们来介绍一下栈和队列。 栈是一个先进后出的数据结构。 队列是一个先进先出的数据结构。 思路分析 写法一 C++版 现在,题目要我们用两个栈来模拟一个队列的入队和出队的操作。那么我们可以先看一下一个队 展开全文
头像 未来0116
发表于 2021-07-18 21:45:50
精华题解 一.题目描述题目链接:https://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6?tpId=188&&tqId=38552&rp=1&ru=/activity/oj&qru=/ta/jo 展开全文
头像 2019113916
发表于 2021-07-18 18:52:45
精华题解 方法一:双栈模拟队列 1.结题思路 模拟题,首先根据栈和队列的特性,栈是先进后出,队列是先进先出,不难得知,将数组元素按1,2,3顺序压入栈后,出栈顺序为3,2,1,改变了一次元素先后顺序,而将元素再压入栈后,出栈顺序即与第一次入栈时相同,实现了先入先出。 2.解法 入栈:栈1入栈即为模拟入队。出栈 展开全文
头像 叫我皮卡丘
发表于 2019-08-09 20:08:12
【剑指offer】用两个栈实现队列 -- Java实现 题解 1. 分析 队列的特性是:“先入先出”,栈的特性是:“先入后出” 当我们向模拟的队列插入数 a,b,c 时,假设插入的是 stack1,此时的栈情况为: 栈 stack1:{a,b,c} 栈 stack2:{} 当需要弹出一个数,根据 展开全文
头像 牛客题解官
发表于 2020-05-29 14:45:04
描述 这是一道对栈和队列之间灵活转化的题目。难度:一星考察知识:队列,栈 题解 方法:模拟 如果我知道队列是FIFO,栈是FILO,但是这道题我还是不知道怎么写怎么办?对于这种感觉不难,但是又不会写的,方法就是模拟。比如有如下操作:(pop操作确保栈中有元素) push(1);push(2);p 展开全文
头像 郭家兴0624
发表于 2019-08-09 21:10:44
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路:栈A用来作入队列栈B用来出队列,当栈B为空时,栈A全部出栈到栈B,栈B再出栈(即出队列) AC代码: def __init__(self): self.stack1=[] self. 展开全文
头像 中工升达预备毕业生
发表于 2019-08-29 10:23:40
// 经典题目,无需多言! (建议AC之后,多看讨论和题解,会提高很快) import java.util.Stack; public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); 展开全文
头像 道阻且长z
发表于 2019-09-07 00:00:40
思路: 首先要明确队列的特性是先进先出,栈的特性是先进后出; 在进队列的方法里我们只要有容器能装元素就行了,所以直接往栈1里压; 在出队列方法里,要保证出队列的是最先进入的元素: 最直观的想法就是把栈1的元素挨个出栈,然后往栈2里压。 但是还是要思考一下真的这么简单吗?不是的,栈2为空时才允许 展开全文
头像 子车啊
发表于 2019-08-21 22:44:16
# -*- coding:utf-8 -*- class Solution: def __init__(self): self.stack1 = [] self.stack2 = [] def push(self, node): # w 展开全文
头像 心谭
发表于 2019-12-25 10:47:26
【剑指offer】【JavaScript题解】 题目描述 用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。 队列中的元素为 int 类型。 专注前端与算法的系列干货分享,欢迎关注(¬‿¬):「微信公众号:心谭博客」| xxoo521.com | GitHub 解法 1: 利用栈的 展开全文
头像 Oh~Sunny
发表于 2020-01-02 19:55:41
class Solution: def __init__(self): self.stack1 = [] self.stack2 = [] def push(self, node): # write code here 展开全文
头像 夜渡寒鸦呀
发表于 2022-05-10 10:01:49
C语言两个栈实现队列 思路:先考虑栈结构,类似一个水桶,先进的元素再最下面;如果说像队列一样,先进的元素最先出去,也就是相当于将栈翻一翻,将水桶的水倒进另一个水桶。因此考虑使用栈,以及倒置栈 入栈操作:正常入栈1,同时将栈1倒置,重置栈2; 出栈操作:从栈2中弹出一个元素,同时使用栈2倒置,重置栈 展开全文
头像 被遗忘的,眼镜
发表于 2021-11-12 01:52:17
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param node int整型 * @return 无 * * C语言声明定义全局变量请加上static,防止重复定义 */ #define Ele int #define MIN -1 展开全文