数据结构练习(02)设计包含min函数的栈
2012-12-11 15:12
447 查看
http://zhedahht.blog.163.com/blog/static/25411174200712895228171/
基本上是把代码抄了一遍,中间也查阅和理解了不少东西。
这里的思想和编程之美上面的稍有不同,编程之美上面给出的解法是涉及一个最小值的链,而这次的思路是涉及一个对应的栈,如果push的不是最小值,则把以前的坐标压栈。
感叹自己的C++水平不足,以后还得不断习练才行。
基本上是把代码抄了一遍,中间也查阅和理解了不少东西。
这里的思想和编程之美上面的稍有不同,编程之美上面给出的解法是涉及一个最小值的链,而这次的思路是涉及一个对应的栈,如果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++水平不足,以后还得不断习练才行。
相关文章推荐
- 程序员面试题精选100题(02)-设计包含min函数的栈[数据结构]
- 程序员面试题精选100题(02)-设计包含min函数的栈[数据结构] - c实现
- 程序员面试题精选100题(02)-设计包含min函数的栈[数据结构]
- 程序员面试题精选100题(02)-设计包含min函数的栈[数据结构]
- 程序员面试题精选100题(02)-设计包含min函数的栈[数据结构]
- 程序员面试题精选100题(02)-设计包含min函数的栈[数据结构]
- (程序员面试题精选(02))-设计包含min函数的栈
- 程序员面试题精选(02)-设计包含min函数的栈
- 设计包含min函数的栈[数据结构]
- 请设计包含min函数的栈,定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素
- 程序员面试题精选(02)-设计包含min函数的栈
- 微软算法100题02 设计包含min函数的栈
- 练习系列 - 3、设计包含min函数的栈,push、pop、min的时间复杂度都为O(1),仿照APR_RING采用宏实现
- 02设计包含min函数的栈
- 数据结构面试题1.2.3-设计包含min函数的栈[数据结构]
- 程序员面试题精选100题(02)-设计包含min函数的栈—python实现
- 设计包含min函数的栈[数据结构]
- 100题_02 设计包含min函数的栈
- 解题笔记-设计包含min函数的栈[数据结构]
- 程序员面试题精选100题(02)-设计包含min函数的栈