我已经实现了在基于数组的Stack上实现Push,Pop,Peek的方法。但我坚持使用方法来返回堆栈的大小并实现动态调整大小,因为我不明白什么是“动态调整大小”。请帮忙!
答案 0 :(得分:0)
动态重新调整大小意味着您可以在堆栈满了后进行扩展。
growArray()可以将当前容量加倍,分配具有调整后大小的新数组,并将旧数组中的所有数据复制到新数组中。
答案 1 :(得分:0)
首先,我想提一些你的计划有问题的事情 你真的想把阵列公之于众吗?您不希望调用者直接修改数组 在构造函数中,您应该确保容量不是负数 您的某些属性可能只是字段 容量只是数组的长度,它应该是只读的。
private int[] data;
private int top;
private int Capacity { get { return data.Length; } }
Push方法没有意义。如果阵列已满,则只需取消推送操作即可。那是你需要增长数组的时候。
public void Push(int value) {
if (IsFull()) GrowArray();
++top;
this.data[top] = value;
}
private void GrowArray() {
//determine what the new length should be
int newLength = Capacity == 0 ? 4 : Capacity * 2;
int[] newArray = new int[newLength];
//copy all the items to the new array.
for (int i = 0; i <= top ++i)
newArray[i] = data[i];
//instead of the for-loop you can write:
//Array.Copy(data, newArray, Capacity);
data = newArray; //replace the old array with the new
}