Day2 coding two 动态调节数组的大小

3 篇文章 0 订阅

需求:动态调节整数组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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值