栈的特点:后进先出
栈是一种线性结构
相对数组,栈对应的操作是数组的子集
只能从一端添加元素,也只能从一端取出元素
这一端称为栈顶
首先,创建栈的抽象类
public interface Stack<E> { int getSize(); boolean isEmpty(); void push(); E pop(); E peek(); }
下面建立的两个stack,基于前面的array和linkedlist数据结构
基于array的stack
public class ArrayStack<E> implements Stack<E>{ private Array<E> array; public ArrayStack(){ array = new Array<>(); } public ArrayStack(int capacity){ array = new Array<>(capacity); } public int getCapacity(){ return array.getCapacity(); } @Override public int getSize() { return array.getSize(); } @Override public boolean isEmpty() { return array.isEmpty(); } @Override public void push(E e) { array.addFirst(e); } @Override public E pop() { return array.removeLast(); } @Override public E peek() { return array.getLast(); } }
基于linkedlist的stack
public class LinkedListStack<E> implements Stack<E>{ LinkedList<E> linkedList = new LinkedList<>(); public LinkedListStack(){ linkedList = new LinkedList<>(); } @Override public int getSize() { return linkedList.getSize(); } @Override public boolean isEmpty() { return linkedList.isEmpty(); } @Override public void push(E e) { linkedList.addFirst(e); } @Override public E pop() { return linkedList.removeFirst(); } @Override public E peek() { return linkedList.getFirst(); } }两者复杂度的差异不大