我已经实现的方法,以实现压入,弹出,PEEK上基于阵列的堆栈。但我坚持的方法来返回堆栈的大小和实现动态调整大小,因为我不明白什么是“动态调整大小”是。请帮忙!基于阵列的堆栈使用C#
回答
首先,我想提一些事情是错了你的计划。
你真的想让阵列公开吗?你不希望调用者直接修改数组。
在构造函数中,您应该确保容量不是负数。
你的一些属性可以只是字段。
容量只是数组的长度,它应该是只读的。
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
}
而不是for循环,你可以写'Array.copy(data,newArray,Capacity);' – wiseveri 2015-04-02 13:58:24
@wiseveri检查! – 2015-04-02 14:03:18
非常感谢您的帮助:) – 2015-04-02 14:05:13
动态调整大小意味着你长大堆栈一旦它的全部。
growArray()可以只加倍的电流容量,以所调整的大小分配一个新的数组,并从旧的阵列复制所有数据到新的一个。
我现在明白了。但不知道如何实现它:-ss – 2015-04-02 13:28:47
@Dennis_E确实为您提供了一个实现。 – wiseveri 2015-04-02 13:57:27
- 1. 基于阵列和基于列表的堆栈和队列
- 2. 基于C++堆栈的对象分配
- 3. 通用堆栈阵列
- 4. C++:使用堆栈
- 5. 阵列堆栈溢出
- 6. 什么是基于堆栈的引用?
- 7. 队列+堆栈C++
- 8. 什么使基于堆的方案比基于堆栈的方案慢?
- 9. 创建一个通用堆栈阵列
- 10. 基于堆栈的内存分配
- 11. 基于堆栈的迷宫探索
- 12. 编译基于堆栈的语言CIL
- 13. 什么是基于堆栈的类?
- 14. 使用队列堆栈
- 15. 关于堆栈和堆栈内存使用的问题
- 16. 阵列内最大调用堆栈大小超出阵列
- 17. 使用堆栈列表的排列
- 18. 使用基于链表的堆栈反转字符串
- 19. 为什么80x87指令集使用“基于堆栈”的设计?
- 20. 堆栈溢出时,申报2阵列
- 21. 堆栈Numpy阵列无附加检查
- 22. OpenGL的矩阵堆栈
- 23. 矩阵堆栈的openGL
- 24. OpenGL:将单应矩阵转换应用于矩阵堆栈
- 25. C++使用的ptr作为阵列基
- 26. 如何使用单个阵列实现三个堆栈
- 27. MIPS尝试使用堆栈复制阵列
- 28. 在MPI,C++上分配单个堆栈阵列
- 29. 长阵列的大结构:更喜欢堆或堆栈分配?
- 30. 堆栈和队列的使用情况?
什么错框架中的堆栈? https://msdn.microsoft.com/en-us/library/3278tedw%28v=vs.110%29.aspx – Jodrell 2015-04-02 14:23:11