C# 基于数组的c语言栈

C# 基于数组的c语言栈,c#,arrays,stack,dynamic-resizing,C#,Arrays,Stack,Dynamic Resizing,我已经实现了在基于数组的堆栈上实现Push、Pop、Peek的方法。但是我一直在使用返回堆栈大小并实现动态调整大小的方法,因为我不知道什么是动态调整大小。请帮忙 动态重新调整大小意味着您可以在堆栈满后增加堆栈 growArray只需将当前容量加倍,分配一个调整大小的新阵列,并将旧阵列中的所有数据复制到新阵列中 首先,我想谈谈您的程序中的一些错误。 是否确实要公开该阵列?您不希望调用方直接修改数组。 在构造函数中,您应该确保容量不是负数。 某些属性只能是字段。 容量只是数组的长度,它应该是只读的

我已经实现了在基于数组的堆栈上实现Push、Pop、Peek的方法。但是我一直在使用返回堆栈大小并实现动态调整大小的方法,因为我不知道什么是动态调整大小。请帮忙

动态重新调整大小意味着您可以在堆栈满后增加堆栈


growArray只需将当前容量加倍,分配一个调整大小的新阵列,并将旧阵列中的所有数据复制到新阵列中

首先,我想谈谈您的程序中的一些错误。 是否确实要公开该阵列?您不希望调用方直接修改数组。 在构造函数中,您应该确保容量不是负数。 某些属性只能是字段。 容量只是数组的长度,它应该是只读的

private int[] data;
private int top;

private int Capacity { get { return data.Length; } }
推送法没有意义。如果阵列已满,则只是取消推送操作。此时需要增加阵列

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
}

我现在明白了。但不确定如何实施:-ss@Dennis_E没有为您提供实现。您可以编写Array.copydata、newArray、Capacity,而不是for循环;非常感谢你的帮助:还有一个问题。对于Size方法返回存储的元素数,我如何实现它?@HoMyHa您有“top”。表示大小。无论如何,我会把它命名为“大小”。大小比顶部大1,但框架中的堆栈有什么问题?