• 剑指offer:用两个栈实现队列


    题目描述:

    用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

    思路:

    可以用stack1来存所有入队的数。在出队操作中,首先将stack1中的元素清空,转移到stack2上,那么此时stack2中的顺序就与队列一致,此时才取出stack2中的栈顶元素。注意,取出元素后,需要将stack2中的数再次清空移回stack1,以保证下次操作的进行。

    时间复杂度O(n)。

    代码:

    class Solution
    {
    public:
        void push(int node) {
            stack1.push(node);
        }
    
        int pop() {
            int tmp;
            while(!stack1.empty())
            {
                tmp = stack1.top();
                stack1.pop();
                stack2.push(tmp);
            }
            tmp = stack2.top();
            stack2.pop();
            
            while(!stack2.empty())
            {
                stack1.push(stack2.top());
                stack2.pop();
            }
            
            return tmp;
        }
    
    private:
        stack<int> stack1;
        stack<int> stack2;
    };
  • 相关阅读:
    玩家移动
    人物上线(激活玩家之后)
    map 玩家上线
    无锁的环形队列
    随笔
    std::bind
    如何查找文件中的schema约束
    myeclipse便捷导包方式
    21 求1+2!+3!+...+20!的和
    20 求出这个数列的前 20 项之和
  • 原文地址:https://www.cnblogs.com/LJ-LJ/p/10584635.html
Copyright © 2020-2023  润新知