您的位置:首页 > Web前端

【剑指 offer】(二十一)—— 包含 min 函数的栈

2016-04-09 15:31 309 查看
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数,在该栈中,调用 min、pop、push 的时间复杂度都是 O(1)。

思路:定义一个辅助栈,用以保存当前栈的最小值,需保持辅助栈和当前栈的高度一致,以实现二者push、pop的同步;

(1)栈的数据结构定义

template<typename T>
class StackWithMin
{
public:
void push(const T& value);
void pop();
const T& min();
private:
stack<T> data;
stack<T> tmp;
};


(2)成员函数实现

template<typename T>
void StackWithMin<T>::push(const T& value)
{
data.push(value);
if (tmp.empty() || value < tmp.top())
tmp.push(value);
else
tmp.push(tmp.top());
}
template<typename T>
void StackWithMin<T>::pop()
{
assert(!data.empty());
data.pop();
tmp.pop();
}
template<typename T>
const T& StackWithMin<T>::min() const
{
assert(!tmp.empty());
return tmp.top();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: