栈中最小数字
给一组数据存入栈中,输出栈中所有数字的最小值
分析:
另开一个栈stackmin,只存最小数据,同步压栈,如果新进一个数比stackmin的栈顶小,就将次最小的数存进新开的栈中,如果新进的数比stackmin的栈顶大,重复压入栈顶元素
#include<iostream>
#include<stack>
#include<cassert>
using namespace std;
class Cstack{
private:
stack<int> stackdata;
stack<int> stackmin;
public:
void Push(int data){
stackdata.push(data);
if(stackmin.empty()){
stackmin.push(data);
}
else if(data<=stackmin.top()){
stackmin.push(data);
}
}
void Pop(){
assert(!stackdata.empty() && !stackmin.empty());
if(stackdata.top() == stackmin.top()){
stackmin.pop();
}
stackdata.pop();
}
int Getmin(){
assert(!stackmin.empty());
return stackmin.top();
}
};
int main(){
Cstack s;
s.Push(36);
s.Push(15);
s.Push(96);
s.Push(6);
s.Push(53);
s.Push(57);
s.Push(69);
s.Pop();
s.Pop();
s.Pop();
s.Pop();
cout<<s.Getmin()<<endl;
return 0;
}