Day2 coding two 動態調節陣列的大小
阿新 • • 發佈:2019-01-09
需求:動態調節整陣列a[ ]的大小。使得它既能儲存所有的元素,又不至於浪費過多的空間。
解決方案: 首先,將棧移動到另一個大小不同的陣列中。
private void resize(int max) {
Item[] temp = (Item[])new Object[max]; //將大小N<max的棧移動到一個新的大小為max的陣列中
for (int i = 0; i < N; i++) {
temp[i] = a[i];
a = temp;
}
}
接下,在push()中檢查陣列大小是否太小。通過檢查棧大小N 和a.length 是否相等判斷是否可以容納新的元素。如果沒有多餘的空間,我們會將陣列的長度加倍,然後一樣用a[N++]=item
插入新的元素。
public void push(Item item) {
if(N==a.length) {
resize(2*a.length);
}
a[N++] = item;
}
}
在pop()中,首先刪除棧頂的元素,然後若數太大就將陣列的長度減半。檢查的條件就是棧大小是否小於陣列的四分之一。在陣列減半以後,它的狀態仍然是半滿狀態。
public Item pop() { Item item = a[N--]; a[N] = null; if(N>0 && N==a.length/4) { resize(a.length/2); } return item }
在這樣的實現中,棧永遠不會溢位,使用率不會低於1/4。