标签:
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的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 ****************************************************************/
标签:
原文地址:http://www.cnblogs.com/Murcielago/p/4185580.html