• 剑指offer 面试题9.1:用两个队列实现栈


    题目描述

    使用队列实现栈的下列操作:push(x) -- 元素 x 入栈pop() -- 移除栈顶元素top() -- 获取栈顶元素empty() -- 返回栈是否为空;

    编程思想

    利用双队列实现,创建两个队列 q1,q2。
    入栈:将元素 x 直接放入 q1 队列中。
    出栈:也就是把 q1 的队尾元素出队列,由于队列只能从队头出队,因此先把 q1 中除了队尾元素的其他值存到 q2 中,再把队尾元素也就是栈顶出队,最后将 q2 中的值存到 q1 中。
    获取栈顶元素:也就是获取 q1 的队尾元素

    编程实现

    class MyStack {
    public:
        queue<int> q1, q2;
        int i = 0;
        int temp;
        int res;
        MyStack() {
    
        }
    
        void push(int x) {
            q1.push(x);
        }
    
        /** Removes the element on top of the stack and returns that element. */
        int pop() {
            int length1 = q1.size();
            i = 0;
            while(length1 > 1 && i < length1 - 1)
            {
                temp = q1.front();
                q2.push(temp);
                q1.pop();
                i++;
            }
            res = q1.front();
            q1.pop();
            i = 0;
            int length2 = q2.size();
            while(i < length2)
            {
                temp = q2.front();
                q1.push(temp);
                q2.pop();
                i++;
            }
            return res;
        }
    
        /** Get the top element. */
        int top() {
            return q1.back();
        }
    
        /** Returns whether the stack is empty. */
        bool empty() {
            return q1.empty();  
        }
    };

    题目总结

    注意栈的出栈操作!!

  • 相关阅读:
    C++ 共用体
    C++ 作用域内枚举
    C++ 作用域为类的常量
    C++ 类作用域
    C++ 对象数组
    C++ this指针
    C++ const成员函数
    C++ 对象的初始化和赋值
    C++ 析构函数
    乌班图 之 apt命令 及 VMware共享文件夹
  • 原文地址:https://www.cnblogs.com/parzulpan/p/11258287.html
Copyright © 2020-2023  润新知