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

    这题也很容易想到:一个栈出栈到另一个栈,然后另一个栈再出栈的顺序将是队列的顺序(原序列逆序的逆序是正序)

    思路:两个栈,stack1,stack2; stack1负责存放元素,stack2负责暂时存放stack1的一次出栈,为了改变stack1里面元素的存放顺序

    入栈操作:1.先将stack1依次出栈,依次存入stack2(这时stack2存放的是目标顺序的倒序)

         2.将新节点node压入stack2(新节点位于栈顶,最先出栈)

         3.将stack2的元素出栈,依次存入stack1(比较新的元素到了栈底,满足了后进后出,先进先出)stack1将是队列的顺序

    弹出操作:stack1出栈的顺序就是队列的顺序了,直接stack1.pop()即可

    比如要插入 1 2

    class Solution
    {
    public:
        void push(int node) {
            while(!stack1.empty()){
                stack2.push(stack1.top());
                stack1.pop();
            }
            stack2.push(node);
            while(!stack2.empty()){
                stack1.push(stack2.top());
                stack2.pop();
            }
        }
    
        int pop() {
            int tmp = stack1.top();
            stack1.pop();
            return tmp;
        }
    
    private:
        stack<int> stack1;
        stack<int> stack2;
    };
    View Code

    .

  • 相关阅读:
    图片上传记得要讲中文的重命名
    hihoCoder #1471 拥堵的城市
    搜狗拼音输入法的快捷键和其他应用快捷键冲突
    Codeforces #765D
    训练记录
    hihoCoder 1367 等式填空
    hihoCoder #1073 光棍节
    计算几何 I. 极角
    hihoCoder #1065 全图传送
    树的点分治专题
  • 原文地址:https://www.cnblogs.com/dupengcheng/p/7660296.html
Copyright © 2011-2022 走看看