package com.dixin.temp;
/**
* 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
* 第一种中如果压入元素小于最小栈顶元素时,直接压入,而大于等于时要压入最小栈的栈顶元素
* 第二种中如果压入元素小于最小栈顶元素时,直接压入,而大于等于时不压入
* 压入有区分当然弹出时就也有所不同了
* 第一种数据栈和最小栈同时弹出
* 第二种当数据栈值等于最小栈时才弹出
*/
import java.util.Stack;
/**
* Created by admin on 2017/10/26.
* 第一种方法
*/
public class L {
Stack<Integer> dataStack=new Stack<>();
Stack<Integer> minStack=new Stack<>();
public void push(int node) {
dataStack.push(node);
if(minStack.isEmpty()) {
minStack.push(node);
} else {
if(node<minStack.peek()) {
minStack.push(node);
} else {
minStack.push(minStack.peek());
}
}
}
public void pop() {
if(dataStack.isEmpty()) {
throw new RuntimeException("数据栈是空的");
}
dataStack.pop();
if(minStack.isEmpty()) {
throw new RuntimeException("最小栈是空的");
}
minStack.pop();
}
public int top() {
return dataStack.peek();
}
public int min() {
if(minStack.isEmpty()) {
throw new RuntimeException("最小栈是空的");
}
return minStack.peek();
}
}
package com.dixin.temp;
import java.util.Stack;
/**
* Created by admin on 2017/10/27.
*
*第二种方法
*/
public class L2 {
Stack<Integer> dataStack=new Stack<>();
Stack<Integer> minStack=new Stack<>();
public void push(int node) {
dataStack.push(node);
if(minStack.isEmpty()) {
minStack.push(node);
} else {
if(node<minStack.peek()) {
minStack.push(node);
}
}
}
public void pop() {
if(dataStack.isEmpty()) {
throw new RuntimeException("数据栈是空的");
}
int value=dataStack.pop();
if(value==minStack.peek()) {
minStack.pop();
}
}
public int top() {
return dataStack.peek();
}
public int min() {
if(minStack.isEmpty()) {
throw new RuntimeException("最小栈是空的");
}
return minStack.peek();
}
}