Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

堆栈

作者头像
王小明_HIT
发布于 2020-04-21 07:55:54
发布于 2020-04-21 07:55:54
1.1K00
代码可运行
举报
文章被收录于专栏:程序员奇点程序员奇点
运行总次数:0
代码可运行

堆栈(英语:stack)又称为堆叠,是计算机科学中的一种抽象数据类型,只允许在有序的线性数据集合的一端(称为堆栈顶端,英语:top)进行加入数据(英语:push)和移除数据(英语:pop)的运算。因而按照后进先出(LIFO, Last In First Out)的原理运作。

LeetCode232题

两个栈组成一个队列

思想:两个栈,一个input ,一个 output , 进入队列都从 input 输入,出队列都从output 出。但是要注意的是 pop, 或者 peek 时,注意如果output 是空的需要将input 中的内容都放到 output 中。如果 output 不为空,就将 input 倒入,会破坏队列的结构。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.util.Stack;

/**
 * 类说明 使用栈实现队列的下列操作:
 * 
 * push(x) -- 将一个元素放入队列的尾部。pop() -- 从队列首部移除元素。peek() -- 返回队列首部的元素。empty() --
 * 返回队列是否为空。
 * 
 * 示例:
 * 
 * MyQueue queue = new MyQueue();
 * 
 * queue.push(1); queue.push(2); queue.peek(); // 返回 1 queue.pop(); // 返回 1
 * queue.empty(); // 返回 false
 * 
 * 来源:力扣(LeetCode)
 * 链接:https://leetcode-cn.com/problems/implement-queue-using-stacks
 * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
 * 
 * <pre>
 * Modify Information:
 * Author        Date          Description
 * ============ =========== ============================
 * wangm          2020年4月18日    Create this file
 * </pre>
 * 
 */
class MyQueue {

    Stack<Integer> input;

    Stack<Integer> output;

    /** Initialize your data structure here. */
    public MyQueue() {
        input = new Stack<Integer>();
        output = new Stack<Integer>();
    }

    public void transfer() {
        if (output.isEmpty()) {
            while (!input.isEmpty()) {
                int x = input.pop();
                output.push(x);
            }
        }
    }

    /** Push element x to the back of queue. */
    public void push(int x) {
        input.push(x);
    }

    /** Removes the element from in front of queue and returns that element. */
    public int pop() {
        transfer();
        return output.pop();
    }

    /** Get the front element. */
    public int peek() {
        transfer();
        return output.peek();
    }

    /** Returns whether the queue is empty. */
    public boolean empty() {
        if (input.isEmpty() && output.isEmpty()) {
            return true;
        } else {
            return false;
        }
    }
}

/**
 * 
 * 类说明 思想: 两个栈,一个input ,一个 output , 进入队列都从 input 输入,出队列都从output 出。但是要注意的是 pop,
 * 或者 peek 时,注意如果output 是空的需要将input 中的内容都放到 output 中。 如果 output 不为空,就将 input
 * 倒入,会破坏队列的结构。
 * 
 * <pre>
 * Modify Information:
 * Author        Date          Description
 * ============ =========== ============================
 * wangm          2020年4月18日    Create this file
 * </pre>
 *
 */
public class LeetCode232 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        MyQueue queue = new MyQueue();

        queue.push();
        queue.push();
        System.out.println(queue.peek()); // 返回 1
        System.out.println(queue.pop()); // 返回 1
        System.out.println(queue.empty()); // 返回 false
    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员奇点 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
leetcode刷题(41)——232. 用栈实现队列
push(x) – 将一个元素放入队列的尾部。 pop() – 从队列首部移除元素。 peek() – 返回队列首部的元素。 empty() – 返回队列是否为空。 示例:
老马的编程之旅
2022/06/22
1200
LeetCode 232题用栈实现队列(Implement Queue using Stacks)
https://leetcode-cn.com/problems/implement-queue-using-stacks/
code随笔
2020/04/14
2500
LeetCode 232题用栈实现队列(Implement Queue using Stacks)
栈和队列的相关问题
 队列可能稍微有点复杂,定义队列的时候需要定义三个变量,分别是end,start,size,先说说他们分别的作用,每次用户拿队中的元素,都从start下标位置取,每次进队都从s=end位置进,每次出队或者进队size都要++或--  假设数组长度是3,如果size没有到3,进队时就把元素放到end的位置上,这是end和size之间的约束关系;如果size不等于0,出队时就总出start位置,这是start和size之间的约束关系。end本身还有一个约束关系,end是控制进队的,所以每次进一个元素end就++,如果end==数组长度,那么end就回到开头也就是0位置
mathor
2018/08/17
6970
栈和队列的相关问题
leecode刷题(26)-- 用栈实现队列
所以我们只用一个栈的话是无法实现队列的操作的。不妨换个思路,我们用两个栈来实现队列:
希希里之海
2019/05/14
3420
leecode刷题(26)-- 用栈实现队列
哈希表-LeetCode 217、219、220、232(hashset、hashmap)
给定一个整数数组,判断是否存在重复元素。 如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
算法工程师之路
2019/11/15
5100
LeetCode 0232 - Implement Queue using Stacks
Implement the following operations of a queue using stacks.
Reck Zhang
2021/08/11
2080
算法:栈和队列-实战
既然文章的标题都说了是栈和队列了,那我们仔细想,题目的意思就是相聚的()要两两配对,是否全部都可以完全配对,就像我们有编辑器写代码的时候,我们用的{ }括号,编辑器又是怎么帮我们匹配上的。就比如({})这个是怎么配对的, 先{} 配对成功,先去除{} ,那么剩下的就是() 再配对最后一堆括号。
营琪
2019/11/04
3060
Leetcode232-栈stack-用栈实现队列
这个是 Leetcode 232 题,用两个栈来实现一个先进先出的队列,实现了一个版本。
潇洒
2023/10/23
1540
我用栈实现了队列!
https://leetcode-cn.com/problems/implement-queue-using-stacks/
代码随想录
2021/07/16
3460
图解「剑指Offer」之使用栈实现队列
这是一道很典型的为初级算法爱好者准备的算法题,首先简单介绍一下 队列 和 栈 这两种数据结构。
五分钟学算法
2019/09/03
3540
队列实现栈有妙招
https://leetcode-cn.com/problems/implement-stack-using-queues/
代码随想录
2021/07/16
2070
232. 用栈实现队列
push(x) -- 将一个元素放入队列的尾部。pop() -- 从队列首部移除元素。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。示例:
lucifer210
2019/09/04
4880
232. 用栈实现队列
栈与队列:我用栈来实现队列怎么样?
push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。
代码随想录
2020/09/21
5700
LeetCode 232:用栈实现队列 Implement Queue using Stacks
Implement the following operations of a queue using stacks.
爱写bug
2019/08/09
4370
栈与队列:用队列实现栈还有点别扭
刚刚做过栈与队列:我用栈来实现队列怎么样?的同学可能依然想着用一个输入队列,一个输出队列,就可以模拟栈的功能,仔细想一下还真不行!
代码随想录
2020/09/21
6120
[leetcode栈队列]1 栈实现队列
因为小蓝当时很想去做短视频的互联网公司,无奈学校当地鲜有相关公司来校招,所以就跋涉去了湖大,当天晚上参加了现场笔试,半夜收到第二天复试通知,二面中面试官就让手撕用栈实现队列。
我是程序员小贱
2020/06/05
4700
【CPP】《程序员面试金典》习题(3)——栈和队列
这次的题更少了,题目的主题是栈和队列,最值得注意的是活用两个栈可以组合完成很多事情。
ZifengHuang
2020/07/29
5510
LeetCode笔记:232. Implement Queue using Stacks
这道题要我们用堆栈来实现队列操作。堆栈和队列最大的区别就在于堆栈是先进后出的,而队列是先进先出的。所以在实现的时候,其他操作都好说,主要是pop和peek操作,我们需要将堆栈本身移除新加入的元素改为移除堆栈底部最开始加入的元素,要达到这个操作就得用另一个堆栈来临时存储数据,就像小时候玩的游戏,要先把堆栈里的数据全部倒到另一个堆栈里,才能取出最底部的元素,移除或者返回后,再将元素全部还原。
Cloudox
2021/11/23
1530
每日算法刷题Day15-0到n-1中缺失的数字、调整数组顺序、从尾到头打印链表、用两个栈实现队列
一个长度为 n−1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围 0 到 n−1之内。
timerring
2022/10/27
7740
每日算法刷题Day15-0到n-1中缺失的数字、调整数组顺序、从尾到头打印链表、用两个栈实现队列
LeetCode | 232.用栈实现队列
上面的题就是 用栈实现队列 题目的截图,同时 LeetCode 给出了一个类的定义,然后要求实现 用栈实现队列 的完整的数据结构。这次我同样没有使用 C 语言,而是使用了 C++ 语言,整个类的定义如下:
码农UP2U
2020/08/26
2910
LeetCode | 232.用栈实现队列
相关推荐
leetcode刷题(41)——232. 用栈实现队列
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档