Java中的栈是一种后进先出(Last In First Out, LIFO)的数据结构,它具有如下几个基本操作:
- 将一个元素压入栈中,称为“入栈”(push)
- 将栈顶元素弹出,称为“出栈”(pop)
- 查看栈顶元素,称为“查看栈顶元素”(peek)
- 判断栈是否为空,称为“判断栈是否为空”(isEmpty)
Java中有多种实现栈的方式,其中最小栈是指一种能够在常数时间内找到栈中最小元素的栈。下面是一个简单的Java最小栈的实现:
import java.util.Stack;
public class MinStack {
private Stack<Integer> stack;
private Stack<Integer> minStack;
public MinStack() {
stack = new Stack<>();
minStack = new Stack<>();
}
public void push(int x) {
stack.push(x);
if (minStack.isEmpty() || x <= minStack.peek()) {
minStack.push(x);
}
}
public void pop() {
int x = stack.pop();
if (x == minStack.peek()) {
minStack.pop();
}
}
public int top() {
return stack.peek();
}
public int getMin() {
return minStack.peek();
}
}
在这个实现中,我们使用了两个栈:一个用来存储所有元素,另一个用来存储当前栈中的最小元素。对于每一个新加入的元素,我们将它压入第一个栈中,如果它比当前最小栈的栈顶元素还要小,我们也将它压入