题目:
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数,在该栈中,调用min,push,pop的时间复杂度都为O(1)。
思路:
模拟栈push,pop过程
#include <iostream>
#include <stack>
using namespace std;
template <typename T> class MinStack
{
public:
MinStack(void) {}
virtual ~MinStack(void) {}
void push(T value);
void pop(void);
T& min(void);
private:
std::stack<T> m_data; // 数据栈,存放栈的所有元素
std::stack<T> m_min; // 辅助栈,存放栈的最小元素
};
template <typename T> void MinStack<T>::push(T value) {
m_data.push(value);
if(m_min.empty() || m_min.top() >= value)
m_min.push(value);
else
m_min.push(m_min.top());
}
template <typename T> void MinStack<T>::pop(){
if(m_data.empty() || m_min.empty())
return;
m_data.pop();
m_min.pop();
}
template <typename T> T& MinStack<T>::min() {
return m_min.top();
}
int main() {
MinStack<int> min;
min.push(2);
cout<<min.min()<<endl;
min.push(3);
cout<<min.min()<<endl;
min.push(1);
cout<<min.min()<<endl;
min.pop();
cout<<min.min()<<endl;
return 0;
}