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。

猜你喜欢

转载自blog.csdn.net/weixin_43192732/article/details/83999806