使用c#的基于数组的堆栈

时间:2015-04-02 13:13:59

标签: c# arrays stack dynamic-resizing

我已经实现了在基于数组的Stack上实现Push,Pop,Peek的方法。但我坚持使用方法来返回堆栈的大小并实现动态调整大小,因为我不明白什么是“动态调整大小”。请帮忙!

2 个答案:

答案 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
}