包含min函数的栈
来源:互联网 发布:mac os 10.7 iso下载 编辑:程序博客网 时间:2024/06/05 05:32
问题描述:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。调用min,push,及pop的时间复杂度都是O(1).
解题思路:定义两个栈,一个数据栈,存放push进来的元素,另一个辅助栈,存放栈的最小元素。每次压入元素的时候,判断该元素是否与辅助栈的栈顶元素的大小关系,如果小于辅助栈栈顶元素则将其压入辅助栈,不然则压入原先最小的元素。
#include <stack>#include <assert.h>template <typename T> class StackWithMin{public: StackWithMin() {} virtual ~StackWithMin() {} T& top(); const T& top() const; void push(const T& value); void pop(); const T& min() const; bool empty() const; size_t size() const;private: std::stack<T> m_data; // 数据栈,存放栈的所有元素 std::stack<T> m_min; // 辅助栈,存放栈的最小元素};template <typename T> void StackWithMin<T>::push(const T& value){ // 把新元素添加到数据栈 m_data.push(value); // 当新元素比之前的最小元素小时,把新元素插入辅助栈里; // 否则把之前的最小元素重复插入辅助栈里 if(m_min.size() == 0 || value < m_min.top()) m_min.push(value); else m_min.push(m_min.top());}template <typename T> void StackWithMin<T>::pop(){ assert(m_data.size() > 0 && m_min.size() > 0); m_data.pop(); m_min.pop();}template <typename T> const T& StackWithMin<T>::min() const{ assert(m_data.size() > 0 && m_min.size() > 0); return m_min.top();}template <typename T> T& StackWithMin<T>::top(){ return m_data.top();}template <typename T> const T& StackWithMin<T>::top() const{ return m_data.top();}template <typename T> bool StackWithMin<T>::empty() const{ return m_data.empty();}template <typename T> size_t StackWithMin<T>::size() const{ return m_data.size();}
需要注意的点:
- 使用模板类实现,可增加栈的灵活性,减少代码重复。
- 提供两个Top版本函数。const和非const版本
- assert函数,考虑代码异常安全。
参考博客:http://zhedahht.blog.163.com/
0 0
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min 函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 我研制的操盘机器人今天继续大获全胜2017-03-01
- EditText使用示例
- 关于IE10输入框focus后触发input事件的bug
- swift的继承
- python机器学习--01.windows下pip安装numpy、scilik-learn、pandas库
- 包含min函数的栈
- 别人那搞过来date工具mark一下
- 简单控件的一些小知识
- mark2
- SpringBoot快速搭建笔记
- linux文件操作指令
- 学习算法收敛条件的判断
- iptables详解
- Toast使用示例