题目:设计包含min函数的栈。
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
文件分布:
头文件和main文件
头文件:代码
#include <stack> #include <assert.h> using namespace std; template <typename T> class stackWithMin{ private : stack<T> m_data; stack<T> m_min; public: stackWithMin(){} virtual ~stackWithMin(){} const T& top() ; T& top() const; void push(const T& value); void pop(); const T& min() const; bool empty() const ; int size() const; }; //入栈 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() const{ return m_data; } //获得栈顶元素 返回常引用 template<typename T> const T& stackWithMin<T>::top() { return m_data; } //大小 template<typename T> int stackWithMin<T>::size() const { return m_data.size(); } //是否为空 template<typename T> bool stackWithMin<T>::empty() const{ return m_data.empty(); }
main文件:代码
#include <iostream> #include <stack> #include <assert.h> #include "minStack.h" using namespace std; int main() { stackWithMin<int> data; data.push(3); cout<< data.min()<<" "; data.push(2); cout<< data.min()<<" "; data.push(3); cout<< data.min()<<" "; data.push(2); cout<< data.min()<<" "; return 0; }
运行结果:
时间: 2024-10-11 12:26:10