包含min函数的栈
来源:互联网 发布:马甲线软件 编辑:程序博客网 时间:2024/04/30 01:53
题目描述:
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数,
调用min,push,pop的时间复杂度为O(1)。
思路:多加一个辅助栈m_min来完成min函数的操作。每次压元素入栈时,判断其与m_min当前最小元素的大小,大则再压栈m_min顶元素入栈一次,小则将该元素压入。
这样可以多次实现min函数功能。若只是添加一个变量来保存最小值,pop一次之后就无法执行min函数。
#include <stack>#include <assert.h>template <typename T> class StackWithMin{public: StackWithMin(void) {} virtual ~StackWithMin(void) {} T& top(void); const T& top(void) const; void push(const T& value); void pop(void); const T& min(void) 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();}同时考察对模版、泛型、类的理解。
int main(){//定义对象,注意标明类型:如intStackWithMin<int> swm;swm.push(1);swm.push(4);swm.push(3);swm.push(2);swm.push(5);std::cout << swm.top() << std::endl;std::cout << swm.min() << std::endl;std::cout << swm.size() << std::endl;swm.pop();std::cout << swm.top() << std::endl;std::cout << swm.min() << std::endl;std::cout << swm.size() << std::endl;return 0;}
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min 函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 【拆了CSS照样是页面】之——HTML语义化(含H5)
- The Broken Window Theory
- 浅谈字符编码
- HDU2072:单词数
- Linux下安装jboss并设置自启动服务
- 包含min函数的栈
- Light oj 1070 - Algebraic Problem
- 字体大宝库:最新25款免费的英文 3D 字体下载
- Xml解析方式以及区别
- Discuz X2.0插件机制解析HOOK钩子程序
- 关于QT系统托盘右键菜单的补充
- 文本框输入内容提示消失的两种实现
- Python中的列表解析和生成表达式
- Study notes for Sampling