码迷,mamicode.com
首页 > 其他好文 > 详细

剑指OFFER之包含min函数的栈

时间:2014-12-25 22:04:50      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

题目描述:

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

 

输入:

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

 

输出:

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

 

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

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函数的栈

标签:

原文地址:http://www.cnblogs.com/Murcielago/p/4185580.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!