Topic stack contains 21 Min function

////////////////////////////////////////////////// ///////////////////////////////////
// 3. topic stack contains 21 Min function

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) / the sizeof ( int ); 
    TRAVERSAL_ARRAY (aiArray, iLen); 

    CMinInStack < int > stMinStack; 

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

    the printf ( " minimum minimum stack elements:% d \ n- " , stMinStack.GetMinValue ()); 

    the printf ( " minimum stack pop-up element:% d \ n- " , stMinStack.Pop ()); 
    the printf ( " minimum stack pop-up element:% d \ n- " , stMinStack.Pop ()); 
    the printf ( " minimum stack minimum element:% d \ n" , StMinStack.GetMinValue ()); 

    the printf ( " minimum stack pop-up element: D% \ n- " , stMinStack.Pop ()); 
    the printf ( " minimum stack minimum element: D% \ n- " , stMinStack.GetMinValue ()) ; 

    the printf ( " minimum stack pop-up element: D% \ n- " , stMinStack.Pop ()); 
    the printf ( " minimum stack pop-up element: D% \ n- " , stMinStack.Pop ()); 
    the printf ( " minimum stack pop-up element :% D \ n- " , stMinStack.Pop ()); 
    the printf ( " minimum stack minimum element: D% \ n- " , stMinStack.GetMinValue ()); 

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

}

Guess you like

Origin www.cnblogs.com/yzdai/p/11258722.html