简述Java可以查询最值的栈 ?
参考答案:
Java本身没有提供可以直接查询最值的栈(Stack)数据结构。栈是一种后入先出(LIFO)的数据结构,通常只支持基本的操作,如push(入栈)、pop(出栈)、peek(查看栈顶元素)等。
然而,你可以通过自定义一个类来实现一个可以查询最值的栈。这个类可以扩展Java内置的Stack
类,或者实现一个自己的栈数据结构,并额外维护一个变量来记录当前栈中的最值。
以下是一个简单的示例,展示如何实现一个可以查询最大值的栈:
import java.util.Stack;
public class MaxValueStack<T extends Comparable<T>> {
private Stack<T> stack;
private T maxValue;
public MaxValueStack() {
stack = new Stack<>();
maxValue = null;
}
public void push(T value) {
stack.push(value);
if (maxValue == null || value.compareTo(maxValue) > 0) {
maxValue = value;
}
}
public T pop() {
T value = stack.pop();
if (value.equals(maxValue)) {
maxValue = stack.isEmpty() ? null : stack.peek();
}
return value;
}
public T peek() {
return stack.peek();
}
public T getMax() {
return maxValue;
}
public boolean isEmpty() {
return stack.isEmpty();
}
}
在这个示例中,MaxValueStack
类扩展了一个泛型栈,并额外维护了一个maxValue
变量来记录当前栈中的最大值。push
方法在向栈中添加元素时,会更新maxValue
变量。pop
方法在从栈中移除元素时,会检查被移除的元素是否是当前的最大值,如果是,则更新maxValue
变量。getMax
方法用于获取当前栈中的最大值。
你可以根据自己的需求对这个示例进行扩展,比如实现一个可以查询最小值的栈,或者同时支持查询最大值和最小值的栈等。