如果一次可以将同一个数据进行两次压栈
一.要压入的数据比栈顶的数据大
(1).将原来栈顶的元素保存起来再Pop掉
(2).将新元素压栈,再将原来栈顶的元素压栈
二.要压入的数据比栈顶的数据小
直接将该数据两次压栈
如果每次都如此压栈的话到最后栈顶的元素一定是所有数据中最小的元素,而且也不会改变入栈的顺序
//两个元素为一组,栈顶为最小的元素
templateclass MinStack
{
public:
void Push(const T& d)
{
if(_ptr.empty() || d <= _ptr.top())//要入栈的元素小于栈顶元素
{
_ptr.push(d);
_ptr.push(d);
}
else
{
T mindata=_ptr.top();
_ptr.push(d);
_ptr.push(mindata);
}
}
void Pop()
{
assert(!_ptr.empty());
_ptr.pop();
_ptr.pop();
}
T& MinData(){return _ptr.top();
}
T& top(){assert(!_ptr.empty());
T mindata=_ptr.top();
_ptr.pop();
T &ret=_ptr.top();
_ptr.push(mindata);
return ret;
}
protected:stack _ptr;
};