/** * By returnZhang * 用栈实现最小栈(获取栈中最小值) * 数据栈 stackData * 栈中最小数据 stackMin */
public class MinStack { private Stack<Integer> stackData;//数据栈 private Stack<Integer> stackMin;//保存当前最小数的栈(称最小栈 //构造函数 public MinStack(){ stackData=new Stack<>(); stackMin=new Stack<>(); } //压人函数 public void push(Integer num){ //压入时判断最小栈是否为空或者要压入的数是否比最小栈栈顶数还小,时则压入数据站的同时压入最小栈 if(stackMin.isEmpty()||getMin()>num){ stackMin.push(num); } stackData.push(num); } //弹出函数 public Integer pop(){ Integer num=stackData.pop(); if(stackMin.peek() == num){ stackMin.pop(); } return num; } //获取栈中最小数 public Integer getMin(){ return stackMin.peek(); } }
ps:感谢左程云老师的 程序员代码面试指南
本文介绍了一种使用两个栈来实现最小栈的数据结构。通过一个数据栈存储所有元素,并使用另一个最小栈跟踪栈内最小值。文章提供了详细的类定义及核心方法实现,包括压栈、弹栈和获取当前最小值。
531





