包含min函数的栈

来源:互联网 发布:杰克尼科尔森 知乎 编辑:程序博客网 时间:2024/06/05 14:51

代码:

#include <iostream>#include <stack>using namespace std;template <typename T> class StackWithMin{public:    StackWithMin();    ~StackWithMin();    const T& top() const;    void push(const T& value);    void pop();    bool empty() const;    size_t size() const;    const T& m_min() const;private:    stack<T> s_data;    //数据栈,存放栈的所有元素    stack<T> s_min;     //辅助栈,存放栈的最小元素};template<typename T> StackWithMin<T>::StackWithMin()        {}template<typename T> StackWithMin<T>::~StackWithMin(){}template<typename T> const T& StackWithMin<T>::top() const{    return s_data.top();}template<typename T> void StackWithMin<T>::push(const T& value){    s_data.push(value);    if (s_min.empty())    {        s_min.push(value);    }    else    {        if (value > s_min.top())            s_min.push(s_min.top());        else            s_min.push(value);    }}template<typename T> void StackWithMin<T>::pop(){    if (!s_data.empty() && !s_min.empty())    {        s_data.pop();        s_min.pop();    }}template<typename T> bool StackWithMin<T>::empty() const{    return s_data.empty();}template<typename T> size_t StackWithMin<T>::size() const{    return s_data.size();}template<typename T> const T& StackWithMin<T>::m_min() const{    return s_min.top();}int main(){    StackWithMin<int> sk;    sk.push(1);    sk.push(2);    sk.push(3);    sk.pop();    cout << "最小值: "<<sk.m_min() << endl;    cout << "栈顶值: "<<sk.top() << endl;    cout << "栈当前大小: "<<sk.size() << endl;    cout << endl;    system("pause");    return 0;}

测试:

这里写图片描述

0 0
原创粉丝点击