跳到主要内容

简述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方法用于获取当前栈中的最大值。

你可以根据自己的需求对这个示例进行扩展,比如实现一个可以查询最小值的栈,或者同时支持查询最大值和最小值的栈等。