package cn.dzp.flyroc.offer; import java.util.Stack; public class StackMinDemo { /*题目描述:定义栈的数据结构,请在该类型中实现一个可以获得栈最小元素的min函数*/ //思路:定义两个栈,一个为数据栈,另外一个为最小值栈 /*实现步骤: * * 1、定义两个栈,一个为数据栈,另外一个为最小值栈 * 2、push操做【先进行数据栈入栈,若是最小值栈为空,则将该数据push到最小值数据栈; * 最小值栈不为空时,若是push的值要小于最小值栈的栈顶值,则将该数据push到最小值栈】 * 3、pop操做【出栈时,若数据栈pop的元素与最小值栈栈顶的元素相同,则最小值栈也出栈】*/ //代码实现 Stack<Integer> stackData = new Stack<>(); //定义数据栈 Stack<Integer> stackMin = new Stack<>(); //定义最小值栈 //push操做 public void push(int node){ //数据栈正常入栈 stackData.push(node); if (stackMin.isEmpty()){ //最小值栈为空 stackMin.push(node); }else{ if (node <= stackMin.peek()){ //push值小于最小值栈栈顶元素 stackMin.push(node); } } } //pop操做 public void pop(){ if (stackData.pop() == stackMin.peek()){ stackMin.pop(); } } //返回最小值 public int min(){ return stackMin.peek(); } }