算法 第四版 1.3.33 ResizingArrayDeque

来源:互联网 发布:网络市场调研报告 编辑:程序博客网 时间:2024/06/05 15:24
package Cap1;import java.util.Iterator;import edu.princeton.cs.introcs.StdOut;public class ResizingArrayDeque<Item> implements Iterable<Item> {private Item[] a = (Item[]) new Object[1];private int N = 0;public boolean isEmpty(){ return N == 0; }public int size(){ return N; }private void resize(int length){Item[] temp = (Item[]) new Object[length];for(int i=0;i<N;i++){temp[i] = a[i];}a = temp;}public void pushLeft(Item item){if(N == a.length) resize(2*a.length);for(int i=N-1;i>=0;i--){a[i+1] = a[i];}a[0] = item;N ++ ;}public void pushRight(Item item){if(N == a.length) resize(2*a.length);a[N++] = item;}public Item popLeft(){if(isEmpty()) return null;Item item = a[0];for(int i=0;i<N-1;i++){a[i] = a[i+1];}a[--N]=null;if(N <= a.length/4) resize(a.length/2);return item;}public Item popRight(){if(isEmpty()) return null;Item item = a[--N];a[N] = null;if(N <= a.length/4) resize(a.length/2);return item;}@Overridepublic Iterator<Item> iterator() {// TODO Auto-generated method stubreturn new ResizingArrayDequeIterator();}private class ResizingArrayDequeIterator implements Iterator<Item>{private int cur = 0;@Overridepublic boolean hasNext() {// TODO Auto-generated method stubreturn cur != N;}@Overridepublic Item next() {// TODO Auto-generated method stubreturn a[cur++];}@Overridepublic void remove() {// TODO Auto-generated method stub}}public static void main(String[] args) {ResizingArrayDeque<Integer> r = new ResizingArrayDeque<Integer>();for(int i=0;i<10;i++){r.pushLeft(i);r.pushRight(i);}for(int i=0;i<10;i++){r.popLeft();}for(Integer i : r)StdOut.println(i);}}