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(); } }