经典面试题21——包含min函数的栈
2012-08-31 12:43
281 查看
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数,在该栈的调用中,调用min、push、以及pop、的时间复杂度都是O(n)。
代码如下:
代码如下:
#include <iostream> #include <stack> #include <stdexcept> #include <iomanip> using namespace std; template<class T> class MinStack{ private: stack<T> s; stack<T> ms; public: void push(const T& value){ s.push(value); if(!ms.empty()) ms.push(value<ms.top()?value:ms.top()); else ms.push(value); } T pop(){ if(s.empty() || ms.empty()) throw exception(); T tmp = s.top(); s.pop(); ms.pop(); return tmp; } T min(){ if(!ms.empty()) return ms.top(); else // it is a little different than java throw out_of_range("\nmin stack is empty\n"); } }; int main(){ MinStack<int> ms; int a[10] = {43,35,34,7,2,6,3,83,99,1}; for(int i = 0 ; i < 10; i++) ms.push(a[i]); for(int i = 0 ; i < 10; i++){ try{ cout<<"before pop min value: "<<setw(3)<<ms.min(); cout<<" pop value: "<<setw(3)<<ms.pop(); cout<<" after pop min value: "<<setw(3)<<ms.min()<<endl; }catch(out_of_range e){ cout<<e.what(); } } system("PAUSE"); return 0; }
相关文章推荐
- 剑指offer——面试题21:包含min函数的栈
- 剑指offer代码解析——面试题21包含min函数的栈
- 剑指offer-面试题21:包含min函数的栈
- 面试题21包含min函数的栈
- 剑指offer 面试题21 包含min函数的栈
- 剑指offer--面试题21:包含min函数的栈--Java实现
- 【剑指offer】面试题21:包含min函数的栈
- 面试题21 包含min函数的栈
- 剑指Offer:面试题21 包含min函数的栈
- 面试题21:包含min函数的栈
- 面试题21 包含min函数的栈
- 【剑指offer】4.3举例让抽象问题具体化——面试题21:包含min函数的栈
- 剑指Offer_面试题21_包含min函数的栈
- 【剑指offer 面试题21】包含min函数的栈
- 剑指offer面试题21之包含min函数的栈
- 面试题21 包含min函数的栈
- 面试题21:包含min函数的栈
- 面试题21:包含min函数的栈
- 面试题 21: 包含min函数的栈
- 【剑指offer】面试题21:包含min函数的栈