我在Data Structures&amp ;;上有一个编程任务。算法,其中一项任务是
“在运行时提示用户输入字符堆栈(M)的大小,并为系统堆栈中的用户堆栈动态分配空间。您可能不会使用”new,malloc“或任何其他运算符,它以任何语言在堆中分配空间。“
我是数据结构的新手,并且想知道我编写的以下代码是否符合要求?
代码:
public class DynamicStack
{
private char[] array;
private int top = 0; // Array counter
private int size; // Array size
private final double CAPACITY_CHANGE_RATE = 1.3; // Stack resize ratio
....
All other methods: push(), pop(), peek(), and etc.
....
private void ensureCapacity()
{
if (isFull()) {
size = (int) Math.ceil(size * CAPACITY_CHANGE_RATE);
char[] oldArray = array;
array = new char[size];
System.arraycopy(oldArray, 0, array, 0, oldArray.length);
}
}
}
从技术上讲,无论我在非静态方法中使用什么,都必须在新的系统堆栈中分配而不是在堆中,对吗?
答案 0 :(得分:4)
从技术上讲,无论我在非静态方法中使用什么,都必须在新的系统堆栈中分配而不是在堆中,对吗?
如果你问是否所有将分配到堆栈上,那么答案(用Java表示)是:否 - 这是不正确的。
例如array = new char[size]
从堆中分配char数组。在Java new
总是从堆中分配。
事实上,我认为你不能用Java编写这个程序......考虑到这些限制。试试C或C ++。