【 题目:】
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min 函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。
【code】
#include<iostream>
//#include<vector>
#include<stack>
#include<algorithm>
//#include<stack>
using namespace std;
class MinStack
{
public:
MinStack();
~MinStack();
void push(const int& data)
{
data_val.push(data);
if ( min_val.empty() || data < min_val.top() )
{
min_val.push(data);
}
else
{
min_val.push(min_val.top());
}
}
void pop()
{
if (!data_val.empty())
{
data_val.pop();
min_val.pop();
}
}
int min()
{
if (!data_val.empty())
{
return min_val.top();
}
else
{
return -1;
}
}
private:
stack<int> data_val;
stack<int> min_val;
};
MinStack::MinStack()
{
}
MinStack::~MinStack()
{
}
int main()
{
MinStack min_stack;
min_stack.pop();
cout << min_stack.min() << endl;
min_stack.push(3);
cout << min_stack.min() << endl;
min_stack.push(4);
cout << min_stack.min() << endl;
min_stack.push(2);
cout << min_stack.min() << endl;
min_stack.push(1);
cout << min_stack.min() << endl;
min_stack.pop();
cout << min_stack.min() << endl;
min_stack.pop();
cout << min_stack.min() << endl;
min_stack.push(0);
cout << min_stack.min() << endl;
return 0;
}
/****
***/