支持最小值的栈设计
来源:互联网 发布:linux 执行二进制文件 编辑:程序博客网 时间:2024/06/16 14:10
题目:
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
思路:在设计上使用两个栈,一个栈(_dataStack)用于存储数据,另一个栈(_minStack)来存储数据中的最小值。
假设当前数据为val,先将val压入_dataStack,再判断_minStack是否为空。如果为空则val也压入_minStack,如果不为空则比较val与_minStack栈顶元素的大小,如果val <= _minStack的栈顶元素,则val也压入_minStack,否则不压入_minStack。
#ifndef _MIN_STACK_H_#define _MIN_STACK_H_#include <stack>#include <cstdlib>#include <iostream>using namespace std;template<typename T>class minStack {public://弹出操作T pop(){T ret = _dataStack.top();_dataStack.pop();if (ret == _minStack.top()){_minStack.pop();}return ret;}//压栈操作void push(T val){_dataStack.push(val);if (_minStack.empty()){_minStack.push(val);}else if (val <= _minStack.top()){_minStack.push(val);}}//获取栈中的最小值T getMinValue(){return _minStack.top();}//获取栈sizeint getSize(){_dataStack.size();}//栈的其余方法都封装_data提供的方法private:stack<T> _dataStack;stack<T> _minStack;};#endif
简单的测试用例:
#include <iostream>#include "minStack.h"using namespace std;int main(){minStack<int> ms;ms.push(7);cout << ms.getMinValue() << endl;ms.push(8);cout << ms.getMinValue() << endl;ms.push(3);cout << ms.getMinValue() << endl;ms.push(2);cout << ms.getMinValue() << endl;ms.push(9);cout << ms.getMinValue() << endl;ms.push(0);cout << ms.getMinValue() << endl;system("pause");return 0;}
结果:
VS2015:
7
7
3
2
2
0
阅读全文
1 0
- 支持最小值的栈设计
- C支持的Int最大值与最小值
- 【题目6】如何设计一个可以获取最小值的栈
- 设计一个可以获取最小值功能的栈
- 可求最小值的栈
- 求栈的最小值
- 栈的最小值
- 符号表支持优先队列的最大值和最小值删除
- 带最小值操作的栈
- 带最小值操作的栈
- 带最小值操作的栈
- Lintcode 带最小值的栈
- 带最小值操作的栈
- 带最小值操作的栈
- 带最小值操作的栈
- 带最小值操作的栈
- 9.3栈和队列(三)——设计一个栈,出pop与push方法,还支持 min方法,可返回栈元素中的最小值
- 栈和队列之设计一个有getMin(得到最小值)功能的栈
- 排序_算法_数据结构
- 百度竞价要懂的公式
- copy && mutableCopy
- JScrollPane中放JTable,但滚动条一直不显示
- CDH5.10+安装过程报错:Unable to verify database connection
- 支持最小值的栈设计
- 自定义UILabel,添加verticalAlignment属性
- 分析ReentrantLock的实现原理
- IntelliJ IDEA中maven导入本地jar包
- textarea 限制输入字符个数
- activiti简单介绍
- .Net Core配置与自动更新
- POJ-1459 Power Network
- Kafka实战篇之搭建Kafka运行环境