zoukankan      html  css  js  c++  java
  • 【剑指offer】8.用两个栈实现队列

    8.用两个栈实现队列

    用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead
    ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

    示例 1:

    输入:

    [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”]

    [[],[3],[],[]]

    输出:[null,null,3,-1]

    th:用两个栈,一个栈push数据 另一个栈pop数据

    输入数据 1 2 3 push进inStack 为 3 2 1 在pop到outStack栈中 为1 2 3 和输入数据顺序一样、

    复杂度分析

    插入元素

    时间复杂度:O(1) 一次push操作
    空间复杂度:O(1) 一个存储空间

    删除元素

    时间复杂度:O(n) 数据从inStack到OutStack栈 loop一次。
    空间复杂度:O(n)

       /*
            * 用两个栈,一个栈push数据 另一个栈pop数据
            输入数据 1 2 3 push进inStack 为  3 2 1 在pop到outStack栈中 为1 2 3 和输入数据顺序一样、
            */
            Stack<Integer> in;
            Stack<Integer> out;
            public CQueue() {
                in = new Stack();
                out = new Stack();
            }
            
            public void appendTail(int value) {
                in.push(value);
            }
            
            public int deleteHead() {
                if(out.empty()){
                    while(!in.empty()){
                        out.push(in.pop());;
                    }
                }
        
                if(out.empty()){
                    return -1;
                }
        
                return out.pop();
            }
    
  • 相关阅读:
    hyper-v使用wifi链接网络
    windows下批量换程序——运维常用
    redis多端口,多实例。
    vs2017 本地IP地址调试 局域网调试
    自动备份
    ipv6无网络访问权限怎么办
    缓存
    学习php
    DateTimeOffset DateTime
    C# 集合
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860678.html
Copyright © 2011-2022 走看看