跳到主要内容

编写Java代码实现顺序栈 ?

参考答案:

顺序栈是一种基于数组实现的栈,它的主要操作包括入栈(push)、出栈(pop)、查看栈顶元素(peek)以及判断栈是否为空(isEmpty)。下面是一个简单的顺序栈的Java实现:

public class ArrayStack<T> {
    private T[] elements;
    private int count;
    private int capacityIncrement;

    public ArrayStack(int capacityIncrement) {
        this.capacityIncrement = capacityIncrement;
        elements = (T[]) new Object[capacityIncrement];
        count = 0;
    }

    public void push(T element) {
        ensureCapacity();
        elements[count] = element;
        count++;
    }

    public T pop() {
        if (count == 0) {
            throw new RuntimeException("Stack is empty");
        }
        count--;
        T item = elements[count];
        elements[count] = null;
        return item;
    }

    public T peek() {
        if (count == 0) {
            throw new RuntimeException("Stack is empty");
        }
        return elements[count - 1];
    }

    public boolean isEmpty() {
        return count == 0;
    }

    private void ensureCapacity() {
        if (count == elements.length) {
            resize(2 * count + capacityIncrement);
        }
    }

    private void resize(int newSize) {
        T[] newElements = (T[]) new Object[newSize];
        System.arraycopy(elements, 0, newElements, 0, count);
        elements = newElements;
    }
}

在这个实现中,我们使用了一个泛型数组来存储栈中的元素,count变量来记录栈中当前元素的数量,capacityIncrement变量用于控制每次扩容时增加的元素数量。

push方法用于向栈中添加一个新元素,pop方法用于从栈中移除并返回栈顶元素,peek方法用于返回栈顶元素但不移除它,isEmpty方法用于判断栈是否为空。

ensureCapacity方法用于检查栈是否已满,如果已满则进行扩容,resize方法用于进行实际的扩容操作,它创建了一个新的数组,并将原数组中的元素复制到新数组中。

请注意,这个实现并没有处理类型安全问题,即它允许向栈中添加任何类型的对象,这可能会导致运行时错误。在实际应用中,你可能需要根据具体需求对这个实现进行修改,例如通过添加类型参数来限制栈中元素的类型。