题目:对现在的Stack(栈)数据结构进行改进,加一个min()功能,使之能在常数,即O(1)时间内给出栈中的最小值。可对push()和pop()函数进行修改,但要求其时间复杂度都只能是O(1)。 template <class T> class Stack { public: void push(T elem); T pop(); T min(); private: // pair.second 放的是除去最后一个元素后的最小值 vector<pair<T,T> > _stack; // 当前最小值 T _minValue; }; template <class T> void Stack<T>::push(T elem) { if(_stack.empty()) _minValue = elem; pair<T,T> e(elem, _minValue); if(elem < _minValue) _minValue = elem; _stack.push_back(e); } template <class T> T Stack<T>::pop() { pair<T,T> e = _stack.back(); _minValue = e.second; _stack.pop_back(); return e.first; } template <class T> T Stack<T>::min() { return _minValue; } int _tmain(int argc, _TCHAR* argv[]) { Stack<int> intStack; intStack.push(2); printf("%d/n", intStack.min()); intStack.push(3); printf("%d/n", intStack.min()); intStack.push(1); printf("%d/n", intStack.min()); intStack.pop(); printf("%d/n", intStack.min()); intStack.pop(); printf("%d/n", intStack.min()); }