主要思路:
1)建立两个栈_data与_mindata,其中_data作为数据栈,存放每一个入栈的数据;_mindata作为数据最小栈,存放数据栈中当前最小的数据;
2)当元素data入栈时,将data入栈到_data数据栈中,并让data与_data的栈顶元素做比较,如果x小于等于_data的栈顶元素,则将data入栈到_mindata最小数据栈中;
3)当元素出栈时,让_data与_mindata的栈顶元素做比较,如果栈顶元素相等,则将_data与_mindata的栈顶元素同时出栈,否则只让_data数据栈的栈顶元素出栈;
4)当求栈中最小元素时,直接让最小元素栈的栈顶元素出栈。
#include <iostream>
#include <stack>
using namespace std;
template <class T>
class retmin
{
public:
void pushmin(const T& data)
{
_data.push(data);
if (!_mindata.empty())
{
T tmp = _mindata.top();
if (data < tmp)
{
_mindata.push(data);
}
else
_mindata.push(tmp);
}
else
_mindata.push(data);
}
void popmin()
{
if (_data.empty())
{
return;
}
if (!_data.empty() && _data.top() =&#