Java实现栈

当实现一个栈(stack)数据结构时,通常需要包括以下常用方法:

  1. push:将元素推入栈顶。
  2. pop:从栈顶弹出并返回元素。
  3. peek:查看栈顶元素,但不将其弹出。
  4. isEmpty:检查栈是否为空。
  5. size:返回栈中元素的数量。

以下是使用数组实现了一个简单的栈:

import java.util.Arrays;

public class MyStack<T> {
    private Object[] array;
    private int size;
    private static final int DEFAULT_CAPACITY = 10;

    public MyStack() {
        array = new Object[DEFAULT_CAPACITY];
        size = 0;
    }

    public void push(T item) {
        if (size == array.length) {
            // 如果栈满了,扩展数组
            ensureCapacity();
        }
        array[size] = item;
        size++;
    }

    public T pop() {
        if (isEmpty()) {
            throw new IllegalStateException("Stack is empty");
        }
        size--;
        T item = (T) array[size];
        array[size] = null; // 将弹出的元素置为null
        return item;
    }

    public T peek() {
        if (isEmpty()) {
            throw new IllegalStateException("Stack is empty");
        }
        return (T) array[size - 1];
    }

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

    public int size() {
        return size;
    }

    private void ensureCapacity() {
        int newCapacity = array.length * 2;
        array = Arrays.copyOf(array, newCapacity);
    }

    public static void main(String[] args) {
        MyStack<Integer> stack = new MyStack<>();
        stack.push(1);
        stack.push(2);
        stack.push(3);

        System.out.println("Stack size: " + stack.size());
        System.out.println("Top element: " + stack.peek());

        while (!stack.isEmpty()) {
            System.out.println("Popped: " + stack.pop());
        }
    }
}

这是一个基本的栈实现,当栈满时,会自动扩展数组的容量。我们可以根据需要调整数组的初始容量和扩展策略。

你可能感兴趣的:(栈,JAVA栈,Stack,1024程序员节)