想做好软件算法和数据结构是跑不掉的,占坑学习记录;----- 栈 (阅读的是谢老师翻译的算法和严老师的数据结构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;
} //使用这样的方式,栈不会溢出,也能保证使用率;