算法与数据结构学习--栈

想做好软件算法和数据结构是跑不掉的,占坑学习记录;----- 栈   (阅读的是谢老师翻译的算法和严老师的数据结构C语言版本)

1.数组做栈结构存在的问题;

//使用数组去做栈的话,必须要预先知道栈的最大容量,所有应该用动态分配内存的方式,
//数组设定的过多会造成空间浪费的情况;

//思考1:如果项目中已经使用了数组的方式去做栈,如何解决;(我的猜想哈)
//solution:增加功能函数,判断栈是否满,满了则复制原数组,扩大后返回;
private void resize(int max)
{
	Item[] temp = (Item[]) new Object[max];
	for(int i = 0;i < N; i++)
		temp[i] = a[i];
	a = temp;
}
//push中先检查栈的大小,太小则加倍;
public void push(String item)
{
	if(N == a.length) resize(2*a.length);
	a[N++] = item;
}
//同理可得数组过大也需要缩小
public String pop()
{
	String item = a[--N];
	a[N] = null;//元素弹出后还会在数组中,变为了游离对象,指向null释放内存
	if (N > 0 && N == a.length/4) resize(a.length/2);//在这里使用1/4是因为如果在1/2处不断pop和push就会不断的调整数组;
	return item;   
}                                  //使用这样的方式,栈不会溢出,也能保证使用率;

​

猜你喜欢

转载自blog.csdn.net/runkui8905/article/details/81660540