包含min函数的栈
定义栈的数据结构,在该类型中实现一个能够得到栈最小元素的min函数,min,push,pop复杂度为o(1)
用一个栈来作为存储栈,另外一个栈压入上一个最小值
画图看看
注意模板类的写法
周全的考虑还应该有size的判断,
template <typename T> class StackMin
{
public:
StackMin() {}
virtual ~StackMin() {}
void push(T iVal);
T pop();
const T& min() const;
private:
std::stack<T> m_oriStack;
std::stack<T> m_minStack;
};
template<typename T> void StackMin<T>::push(T iVal)
{
if (m_oriStack.size()<=0 || iVal <= m_minStack.top())
{
m_minStack.push(iVal);
m_oriStack.push(iVal);
}
else
m_oriStack.push(iVal);
}
template<typename T> T StackMin<T>::pop()
{
assert(m_oriStack.size() > 0 && m_minStack.size() > 0);
T iOut = m_oriStack.top();
if (m_oriStack.top() == m_minStack.top())
{
m_oriStack.pop();
m_minStack.pop();
}
else
m_oriStack.pop();
return iOut;
}
template<typename T> const T& StackMin<T>::min() const
{
assert(m_minStack.size() > 0);
return m_minStack.top();
}