给一组数据存入栈中,输出栈中所有数字的最小值

分析:

另开一个栈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;
}