您的位置:首页 > 理论基础 > 数据结构算法

数据结构练习(02)设计包含min函数的栈

2012-12-11 15:12 423 查看
http://zhedahht.blog.163.com/blog/static/25411174200712895228171/

基本上是把代码抄了一遍,中间也查阅和理解了不少东西。

这里的思想和编程之美上面的稍有不同,编程之美上面给出的解法是涉及一个最小值的链,而这次的思路是涉及一个对应的栈,如果push的不是最小值,则把以前的坐标压栈。

#include <deque>
#include <cassert>

template <typename T> class CStackWithMin
{
public:
CStackWithMin(void) {}
virtual ~CStackWithMin(void) {}

T& top(void);
const T& top(void) const;

void push(const T& value);
void pop(void);

const T& min(void) const;

private:
deque<T> m_data;
deque<size_t> m_minIndex;
};

template <typename T> T& CStackWithMin<T>::top()
{
return m_data.back();
}

template <typename T> const T& CStackWithMin<T>::top() const
{
return m_data.back();
}

template <typename T> void CStackWithMin<T>::push(const T& value)
{
m_data.push_back(value);

if (m_minIndex.size() == 0)
m_minIndex.push_back(0);
else
{
if (value < m_data[m_minIndex.back()])
m_minIndex.push_back(m_data.size() - 1);
else
m_minIndex.push_back(m_minIndex.back());
}
}

template <typename T> void CStackWithMin<T>::pop()
{
m_data.pop_back();
m_minIndex.pop_back();
}

template <typename T> const T& CStackWithMin<T>::min() const
{
assert(m_data.size() > 0);
assert(m_minIndex.size() > 0);

return m_data[m_minIndex.back()];
}


感叹自己的C++水平不足,以后还得不断习练才行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: