堆栈

简介: 堆栈

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

640.png

LeetCode232题


两个栈组成一个队列



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


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(1);
        queue.push(2);
        System.out.println(queue.peek()); // 返回 1
        System.out.println(queue.pop()); // 返回 1
        System.out.println(queue.empty()); // 返回 false
    }
}


相关文章
|
5G 芯片
带你读《无人机网络与通信》之二:空对地与空对空数据链路通信
本书针对无人机系统两个关键问题—通信组网和管控体系做了比较全面和深入的描述和探讨,特别是以大量笔墨分析了现有无线通信解决方案,对比了不同通信协议,得出了很有价值的研究结论。无人机的跨越式发展将涉及公共安全管理的问题,构建管控体系是当务之急,分级管理以及制定相应的适航标准是一件大事情,本书对此也进行了系统的、建设性的讨论。未来,高档无人机和无人机集群将对环境具有更强的感知能力和自适应能力,还有对任务的自规划和学习、调整能力,本书讨论的内容将为它们的发明、部署和监督提供宝贵的信息。
|
11月前
|
机器学习/深度学习 自然语言处理 搜索推荐
智能语音识别技术的现状与未来发展趋势####
【10月更文挑战第21天】 本文深入探讨了智能语音识别技术的发展脉络、当前主要技术特点及面临的挑战,并展望了其未来的发展趋势。通过分析传统声学模型与深度学习技术的融合、端到端建模的兴起以及多模态交互的探索,揭示了智能语音识别技术向更高精度、更强鲁棒性迈进的必然趋势。同时,文章也指出了数据隐私、噪声干扰等挑战,并提出了相应的解决方案和研究方向,为智能语音识别技术的未来发展提供了参考。 ####
857 1
|
存储 JavaScript 前端开发
JS篇(Array、Object)
JS篇(Array、Object)
146 1
|
12月前
|
数据采集 自然语言处理 文字识别
92页的llama 3.1技术报告,我替你们啃下来了
作者花了半个月时间,认真读完了llama 3.1技术报告,并总结成本文,希望能帮到对这个感兴趣的小伙伴们。
92页的llama 3.1技术报告,我替你们啃下来了
|
人工智能 搜索推荐 物联网
DoRA(权重分解低秩适应):一种新颖的模型微调方法_dora模型
DoRA(权重分解低秩适应):一种新颖的模型微调方法_dora模型
718 0
|
人工智能 前端开发 开发工具
Agent调研--19类Agent框架对比(上)
Agent调研--19类Agent框架对比(上)
11628 1
|
自然语言处理 算法 NoSQL
手把手教学小型金融知识图谱构建:量化分析、图数据库neo4j、图算法、关系预测、命名实体识别、Cypher Cheetsheet详细教学等
手把手教学小型金融知识图谱构建:量化分析、图数据库neo4j、图算法、关系预测、命名实体识别、Cypher Cheetsheet详细教学等
手把手教学小型金融知识图谱构建:量化分析、图数据库neo4j、图算法、关系预测、命名实体识别、Cypher Cheetsheet详细教学等
|
运维 供应链 监控
综合竞争力第一!阿里云入选沙利文中国专有云市场领导者象限
国际知名咨询机构沙利文日前发布了《2022年中国专有云市场报告》,阿里云稳居领导者象限,并在增长指数和创新指数两大维度上均获最高分。
611 0
综合竞争力第一!阿里云入选沙利文中国专有云市场领导者象限
|
SQL 存储 人工智能
多项榜单第一,达摩院算法工程师深度揭秘让表格说话的TableQA技术
多项榜单第一,达摩院算法工程师深度揭秘让表格说话的TableQA技术
345 0
|
机器学习/深度学习 算法 搜索推荐
线性模型(LR)的优化技巧总结(全)
逻辑回归由于其简单高效、易于解释,是工业应用最为广泛的模型之一,比如用于金融风控领域的评分卡、互联网的推荐系统。上文总结了逻辑回归的原理及其实现【全面解析并实现逻辑回归(Python)】。 本文从实际应用出发,以数据特征、优化算法、模型优化等方面,全面地归纳了逻辑回归(LR)优化技巧。