支持最小值的栈设计

来源:互联网 发布: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



原创粉丝点击