实现一个getMin功能的栈

    题目:实现一个特殊的栈,在实现栈基本功能的基础上,再实现返回栈中最小元素的操作。要求pop、push、getMin时间复杂度都是O(1),设计时使用现成的栈结构。

    用C++实现了一下。

template 
class MyStack
{
public:
    void Push(const T& t)
    {
        m_data.push(t);
        if (m_min.empty() || t <= m_min.top())
        {
            m_min.push(t);
        }
    }

    void Pop()
    {
        if (!m_min.empty() && m_data.top() <= m_min.top())
        {
            m_min.pop();
        }
        m_data.pop();
    }

    T Top() const
    {
        if (m_data.empty())
        {
            throw std::out_of_range("MyStack::m_data is empty.");
        }
        return m_data.top();
    }

    bool Empty()
    {
        return m_data.empty();
    }

    T GetMin() const
    {
        if (m_min.empty())
        {
            throw std::out_of_range("MyStack::m_min is empty.");
        }
        return m_min.top();
    }

private:
    stack m_data;
    stack m_min;
};


你可能感兴趣的:(C/C++,找工作-面试笔试,数据结构与算法)