1. 程式人生 > >Day2 coding two 動態調節陣列的大小

Day2 coding two 動態調節陣列的大小

需求:動態調節整陣列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。