publicclassArrayStack<E>implementsStack<E>,Iterable<E>{privateE[] arr;privateint top =0;@SuppressWarnings("all")publicArrayStack(int capacity){this.arr =(E[])newObject[capacity];}@Overridepublicbooleanpush(E val){if(isFull())returnfalse;
arr[top++]= val;returntrue;}@OverridepublicEpop(){if(isEmpty())returnnull;E res = arr[--top];
arr[top]=null;return res;}@OverridepublicEpeek(){if(isEmpty()){returnnull;}return arr[top -1];}@OverridepublicbooleanisEmpty(){return top ==0;}@OverridepublicbooleanisFull(){return top ==this.arr.length;}// TODO 扩容@OverridepublicIterator<E>iterator(){returnnewIterator<E>(){int p = top;@OverridepublicbooleanhasNext(){return p >0;}@OverridepublicEnext(){return arr[--p];}};}}
链表实现
publicclassLinkedListStack<E>implementsStack<E>,Iterable<E>{privateint capacity =Integer.MAX_VALUE;privateint size;privatefinalNode<E> head =newNode<>(null,null);publicLinkedListStack(){}publicLinkedListStack(int capacity){this.capacity = capacity;}@Overridepublicbooleanpush(E val){if(isFull()){returnfalse;}
head.next =newNode<>(val, head.next);
size++;returntrue;}@OverridepublicEpop(){if(isEmpty()){returnnull;}Node<E> first = head.next;
head.next = first.next;
size--;return first.value;}@OverridepublicEpeek(){if(isEmpty()){returnnull;}return head.next.value;}@OverridepublicbooleanisEmpty(){return size ==0;}@OverridepublicbooleanisFull(){return size == capacity;}@OverridepublicIterator<E>iterator(){returnnewIterator<E>(){Node<E> p = head.next;@OverridepublicbooleanhasNext(){return p !=null;}@OverridepublicEnext(){E value = p.value;
p = p.next;return value;}};}staticclassNode<E>{E value;Node<E> next;publicNode(E value,Node<E> next){this.value = value;this.next = next;}}}