定义栈的数据结构,在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min , push , pop 的时间复杂度都是O(1)。
1 /////////////////包含min函数的栈/////////////////////// 2 template<class T> class StackWithMin 3 { 4 public: 5 void push(const T& value); 6 void pop(); 7 T& min(); 8 private: 9 stack<T> m_data ;//保存数据 10 stack<T> m_min ;//保存最小值 11 }; 12 13 template<class T> void StackWithMin<T>::push(const T& value) 14 { 15 16 m_data.push(value); 17 if ( m_min.size()==0 || value<m_min.top() ) 18 { 19 m_min.push(value); 20 } 21 else 22 { 23 m_min.push(m_min.top()); 24 } 25 } 26 template<class T> void StackWithMin<T>::pop() 27 { 28 if (m_data.size()>0 && m_min.size()>0) 29 { 30 m_data.pop(); 31 m_min.pop(); 32 } 33 else 34 { 35 return; 36 } 37 } 38 template<class T> T& StackWithMin<T>::min() 39 { 40 assert(m_min.size()>0); 41 42 return m_min.top(); 43 44 45 }
原文:http://www.cnblogs.com/csxcode/p/3701513.html