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();
     */
  • 相关阅读:
    最新国家标准下载(2020-7-31)
    SL/T 264-2020 水利水电工程岩石试验规程
    SH/T 3082-2019 石油化工仪表供电设计规范
    GB/T 4780-2020 汽车车身术语
    Java——冒泡排序
    JSP处理XML数据
    JSP标准标签库(JSTL)
    千锤百炼软工第十九天
    千锤百炼软工第十八天
    千锤百炼软工第十七天
  • 原文地址:https://www.cnblogs.com/Initial-C-/p/14599409.html
Copyright © 2011-2022 走看看