首页 > 其他 > 详细

题目21 包含Min函数的栈

时间:2019-07-28 15:35:44      阅读:57      评论:0      收藏:0      [点我收藏+]

/////////////////////////////////////////////////////////////////////////////////////
// 3. 题目21  包含Min函数的栈

template <typename TYPE>
class CMinInStack
{
public:
    void Push(const TYPE& value);
    const TYPE Pop();
    const TYPE& GetMinValue() const;

private:
    stack<TYPE> m_stDataStack;
    stack<TYPE> m_stMinStack;
};

template <typename TYPE>
const TYPE& CMinInStack<TYPE>::GetMinValue() const
{
    assert(!m_stDataStack.empty() && !m_stMinStack.empty());

    return m_stMinStack.top();
}

template <typename TYPE>
const TYPE CMinInStack<TYPE>::Pop()
{
    assert(!m_stDataStack.empty() && !m_stMinStack.empty());

    TYPE value = m_stDataStack.top();
    m_stDataStack.pop();
    m_stMinStack.pop();

    return value;
}

template <typename TYPE>
void CMinInStack<TYPE>::Push(const TYPE& value)
{
    // 1.向栈中添加元素
    m_stDataStack.push(value);

    // 2.往辅助栈中添加最小元素
    if (m_stMinStack.empty() || value < m_stMinStack.top())
    {
        m_stMinStack.push(value);
    }
    else
    {
        m_stMinStack.push(m_stMinStack.top());
    }
}

void MinInStackTestFunc()
{
    cout << "\n\n --------------- MinInStackTestFunc Start -------------->" << endl;

    int aiArray[] = {3, 4, 5, 8, 9, 1, 4, 45, 89};
    int iLen = sizeof(aiArray) / sizeof(int);
    TRAVERSAL_ARRAY(aiArray, iLen);

    CMinInStack<int> stMinStack;

    for (int i = 0; i < iLen; i++)
    {
        stMinStack.Push(aiArray[i]);
    }

    printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue());

    printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
    printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
    printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue());

    printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
    printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue());

    printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
    printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
    printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
    printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue());

    cout << "\n\n --------------- MinInStackTestFunc End -------------->" << endl;

}

题目21 包含Min函数的栈

原文:https://www.cnblogs.com/yzdai/p/11258722.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!