您的位置:首页 > 职场人生

经典面试题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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: