剑指Offer之面试题21:包含min函数的栈

来源:互联网 发布:上海国金网络朱文君 编辑:程序博客网 时间:2024/05/01 16:22


所有代码均通过G++编译器测试,仅为练手纪录。


//面试题21:包含min函数的栈

//题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。

//     在该栈中,调用min/push/pop的时间复杂度都是O(1)


//面试题21:包含min函数的栈//题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。//     在该栈中,调用min/push/pop的时间复杂度都是O(1)。template<typename T>class CStackMin{public:    CStackMin(){}    ~CStackMin()    {        Clear();    }    public:    void Push(const T& item)    {        m_stackValue.push(item);        if (m_stackMin.empty())        {            m_stackMin.push(item);        }        else        {            if(item <= m_stackMin.top())            {                m_stackMin.push(item);            }        }    }        void Pop()    {        if(m_stackMin.empty())        {            return;        }                if(m_stackValue.top() == m_stackMin.top())        {            m_stackMin.pop();        }                m_stackValue.pop();    }        T Min() const    {        if(m_stackMin.empty())        {            return T();        }                return m_stackMin.top();    }    private:    void Clear()    {        while (!m_stackValue.empty())        {            m_stackValue.pop();        }                while (!m_stackMin.empty())        {            m_stackMin.pop();        }    }    private:    stack<T> m_stackValue;    stack<T> m_stackMin;};void TestStackMin(){    CStackMin<int> stack;    stack.Push(3);    LogInfo("Min:%d",stack.Min());    stack.Push(7);    LogInfo("Min:%d",stack.Min());    stack.Push(2);    LogInfo("Min:%d",stack.Min());    stack.Push(4);    LogInfo("Min:%d",stack.Min());    stack.Push(9);    LogInfo("Min:%d",stack.Min());    stack.Push(1);    LogInfo("Min:%d",stack.Min());    stack.Push(4);    LogInfo("Min:%d",stack.Min());        stack.Pop();    LogInfo("Min:%d",stack.Min());    stack.Pop();    LogInfo("Min:%d",stack.Min());    stack.Pop();    LogInfo("Min:%d",stack.Min());    stack.Pop();    LogInfo("Min:%d",stack.Min());    stack.Pop();    LogInfo("Min:%d",stack.Min());    stack.Pop();    LogInfo("Min:%d",stack.Min());    stack.Pop();    LogInfo("Min:%d",stack.Min());    stack.Pop();    LogInfo("Min:%d",stack.Min());}

ZhaiPillary

2016-12-25


0 0
原创粉丝点击