演算法(第四版)學習筆記之java實現能夠動態調整陣列大小的棧
阿新 • • 發佈:2019-01-30
下壓(LIFO)棧:能夠動態調整陣列大小的實現
import java.util.Iterator; public class ResizingArrayStack<Item> implements Iterable<Item> { private int N = 0; private Item[] a = (Item[]) new Object[1]; public boolean isEmpty() { return N == 0; } public int size() { return N; } public void resize(int max) { Item[] temp = (Item[]) new Object[max]; for(int i = 0 ; i < N ; i++) { temp[i] = a[i]; } a = temp; } public Item pop() { Item item = a[--N]; a[N] = null; if(N > 0 && N == a.length / 4) { resize(a.length / 2); } return item; } public void push(Item item) { if(N == a.length) { resize(a.length * 2); } a[N++] = item; } @Override public Iterator<Item> iterator() { // TODO Auto-generated method stub return new reverseArrayIterator(); } private class reverseArrayIterator implements Iterator<Item> { private int i = N; @Override public boolean hasNext() { // TODO Auto-generated method stub return i > 0; } @Override public Item next() { // TODO Auto-generated method stub return a[--i]; } @Override public void remove() { // TODO Auto-generated method stub } } }
優點:
幾乎(但還沒用)達到了任意集合類資料型別的實現的最佳效能:
1.每項操作的用時都與集合大小無關;
2.空間需求總是不超過集合大小乘以一個常數。
缺點:
某些push()和pop()操作會調整陣列的大小,這項操作的耗時和棧的大小成正比。