题目21 包含Min函数的栈

/////////////////////////////////////////////////////////////////////////////////////
// 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;

}
posted @ 2019-07-28 13:44  VIP丶可乐  阅读(179)  评论(0编辑  收藏  举报