栈遵循先入后出原则,只能在线性表的一端添加和删除元素。我们可以把栈看做一个杯子,杯子只有一个口进出,最低处的元素只能等到上面的元素离开杯子后,才能离开。
向栈中插入一个元素时,称为入栈(压栈),移除栈顶元素称为出栈,我们需要尝试实现以下抽象类型:
/*** 抽象类型栈,待实现* @param <E> 元素类型*/public abstract class AbstractStack<E> {/*** 出栈操作* @return 栈顶元素*/public abstract E pop();/*** 入栈操作* @param e 元素*/public abstract void push(E e);}
其实,我们的JVM在处理方法调用时,也是一个栈操作:

栈的深度是有限制的,如果达到限制,将会出现StackOverflowError错误(注意是错误!说明是JVM出现了问题)
/*** 抽象类型栈,待实现* @param <E> 元素类型*/public abstract class Stack<E> {/*** 出栈操作* @return 栈顶元素*/public abstract E pop();/*** 入栈操作* @param e 元素*/public abstract void push(E e);}class MyStack<E> extends Stack<E> {private Object[] e;private final Integer MAX_SIZE = 512;public MyStack(){this.e = new Object[MAX_SIZE];top = 0;}private Integer top = 0;@Overridepublic E pop() {if(top <= 0) {System.out.println("Empty Stack");return null;}return (E) this.e[top--];}@Overridepublic void push(E e) {if(top >= 512){System.out.println("Stack Full");return;}this.e[++top] = e;}}
