首页 > 代码库 > 剑指OFFER之包含min函数的栈

剑指OFFER之包含min函数的栈

题目描述:

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

 

输入:

输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n(1<=n<=1000000), n代表将要输入的操作的步骤数。
接下来有n行,每行开始有一个字母Ci。
Ci=’s’时,接下有一个数字k,代表将k压入栈。
Ci=’o’时,弹出栈顶元素。

 

输出:

对应每个测试案例中的每个操作,
若栈不为空,输出相应的栈中最小元素。否则,输出NULL。

 

样例输入:
7s 3s 4s 2s 1oos 0
样例输出:
3321230

Code:
#include <iostream>#include <cstdio>#include <stack> using namespace std; int main(){    int n;    char operation;    stack<int> stack1,stack2;    while(cin>>n){        int k,minVal;        bool isFirst=true;        getchar();        while(stack1.empty()==false)            stack1.pop();        while(stack2.empty()==false)            stack2.pop();        for(int cnt=0;cnt<n;++cnt){            cin>>operation;            if(operation==s){                cin>>k;                if(isFirst){                    minVal=k;                    isFirst=false;                }else{                    if(k<minVal)                        minVal=k;                }                cout<<minVal<<endl;                stack1.push(k);                stack2.push(minVal);            }            if(operation==o){                if(stack1.empty()==true&&stack2.empty()==true){                    cout<<"NULL"<<endl;                    isFirst=true;           //当stack为空的时候要把isFirst重新置为true                }else{                    stack1.pop();           //题目要求是先出栈,再把栈顶元素输出                    stack2.pop();                    if(stack1.empty()==true&&stack2.empty()==true){  //这个时候2个stack还是有可能为空                        cout<<"NULL"<<endl;                        isFirst=true;                    }else{                        int topVal=stack2.top();                        minVal=topVal;     //修改栈顶元素弹出后stack2中的最小值                        cout<<topVal<<endl;                    }                }            }        }    }    return 0;} /**************************************************************    Problem: 1522    User: lcyvino    Language: C++    Result: Accepted    Time:120 ms    Memory:1524 kb****************************************************************/

 

剑指OFFER之包含min函数的栈