【面试题】剑指offer21

    xiaoxiao2021-03-25  127

    定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的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; }

    转载请注明原文地址: https://ju.6miu.com/read-19892.html

    最新回复(0)