【面试题】剑指offer21

来源:互联网 发布:手机壁纸diy软件 编辑:程序博客网 时间:2024/05/21 13:48

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,pop,push的时间复杂度都为O(1)

#include<stack>#include<cassert>#include<iostream>using namespace std;template<typename T>class MyStack{public:    MyStack()    {}    void StackPush(const int& x)    {        _data.push(x);        if(_min.size()==0||_min.top()>x)            _min.push(x);        else            _min.push(_min.top());    }    void StackPop()    {        assert(_data.size()>0&&_min.size()>0);        _data.pop();        _min.pop();    }    void StackMin()    {        assert(_data.size()>0&&_min.size()>0);      cout<< _min.top()<<endl;    }    void PrintStack()    {        stack<T> s1,s2;        s1=_data;        s2=_min;        cout<<"_data: "<<endl;        while(s1.size())        {            cout<<s1.top()<<" ";            s1.pop();        }        cout<<endl;        cout<<"_min"<<endl;        while (s2.size())        {            cout<<s2.top()<<" ";                s2.pop();        }        cout<<endl;    }private:    stack<T> _data;    stack<T> _min;};void test(){    MyStack<int> s;    s.StackPush(3);    s.StackPush(4);    s.StackPush(2);    s.StackPush(1);    s.PrintStack();    s.StackMin();    s.StackPop();    s.StackPop();    s.StackMin();    s.PrintStack();    s.StackPush(0);    s.StackMin();    s.PrintStack();} 
#include "Stack.h"int main(){    test();    system("pause");    return 0;}

这里写图片描述

0 0
原创粉丝点击