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

    题目描述:

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

    示例 1:

    输入:
    ["CQueue","appendTail","deleteHead","deleteHead"]
    [[],[3],[],[]]
    输出:[null,null,3,-1]

    示例 2:

    输入:
    ["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
    [[],[],[5],[2],[],[]]
    输出:[null,-1,null,null,5,2]

    提示:

    1 <= values <= 10000
    最多会对 appendTail、deleteHead 进行 10000 次调用

    来源:力扣(LeetCode)

    题目分析

    栈和队列是两种常见的数据结构

    栈:先入后出

    队列: 先入先出

    解题思路

    题目要求用两个栈实现队列,根据两种数据结构的特点,在队列执行添加操作时,向栈s1种压入,而在队列执行删除操作时,则将s1种元素全部弹出并逆向插入栈s2,弹出s2栈顶元素后,再将s2中元素依次压入s1

    代码实现:

    class CQueue {
    private:
        stack<int> s1,s2;
    public:
        CQueue() {
            while(!s1.empty()){
                s1.pop();
            }
            while(!s2.empty()){
                s2.pop();
            }
        }
        
        void appendTail(int value) {
            s1.push(value);
        }
        
        int deleteHead() {
            if(s1.empty()){
                return -1;
            }
            while(!s1.empty()){
                s2.push(s1.top());
                s1.pop();
            }
            int ans=s2.top();
            s2.pop();
            while(!s2.empty()){
                s1.push(s2.top());
                s2.pop();
            }
            return ans;
        }
    };
    
    /**
     * Your CQueue object will be instantiated and called as such:
     * CQueue* obj = new CQueue();
     * obj->appendTail(value);
     * int param_2 = obj->deleteHead();
     */
  • 相关阅读:
    【ORA-02049】超时分布式事务处理等待锁 解决方法
    Git使用出错:Couldn‘t reserve space for cygwin‘s heap, Win32
    JS身份证号码校验
    linux 下查看cpu位数 内核等参数命令(转)
    linux ps命令,查看进程cpu和内存占用率排序(转)
    JAVA图片验证码
    JAVA BigDecimal 小数点处理
    Linux命令大全
    Eclipse Java注释模板设置详解
    JSONArray的应用
  • 原文地址:https://www.cnblogs.com/Initial-C-/p/14599409.html
Copyright © 2011-2022 走看看