首先设计一个Stack的接口,定义5种操作,分别为获取栈中元素个数,是否为空,入栈,出栈,取出栈顶元素
public interface Stack<E> { int getSize(); boolean isEmpty(); void push(E e); E pop(); E peek();//取栈顶元素,所有操作的时间复杂度都为O(1) }
引入上篇中实现的Array动态数组
public class ArrayStack<E> implements Stack<E>{ Array<E> array; public ArrayStack(int capacity){ array=new Array<>(capacity); } public ArrayStack(){ array=new Array<>(); } @Override public int getSize(){ return array.getSize(); } @Override public boolean isEmpty(){ return array.isEmpty(); } public int getCapacity(){ return array.getCapacity(); } @Override public void push(E e){ array.addLast(e); } @Override public E pop(){ return array.removeLast(); } @Override public E peek(){ return array.getLast(); } @Override public String toString(){ StringBuilder res = new StringBuilder(); res.append("Stack: "); res.append('['); for (int i=0;i<array.getSize();i++){ res.append(array.get(i)); if(i!=array.getSize()-1) res.append(","); } res.append("] top"); return res.toString(); } }
测试实现的数组栈
public static void main(String[] args) { int opCount=10000000; ArrayStack<Integer> stack=new ArrayStack<>(); for(int i=0;i<5;i++){ stack.push(i); System.out.println(stack); } stack.pop(); System.out.println(stack); }