定义

是一个限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

特点

  • 后进先出(LIFO)

图形

image.png

手写Stack

public class Stack<E> {
    private Object[] data;
    private int size;

    public Stack(int capacity) {
        data = new Object[capacity];
    }

    public void push(E e) { //压栈
	if(size == data.length) throw new IndexOutOfBoundsException();
        data[size++] = e;
    }

    @SuppressWarnings("unchecked")
    public E peek(){
        return (E) data[size-1];
    }

    @SuppressWarnings("unchecked")
    public E pop() { //出栈
        if (size == 0) return null;
        E c = (E) data[--size];
        data[size] = null;
        return c;
    }

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