0

我有一个关于数据结构和算法的编程任务,其中一项任务是

“在运行时提示用户字符栈(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);
        }
    }
}

从技术上讲,我在非静态方法中使用的任何东西都必须分配到新的系统堆栈中,而不是进入堆中,对吧?

4

1 回答 1

4

从技术上讲,我在非静态方法中使用的任何东西都必须分配到新的系统堆栈中,而不是进入堆中,对吧?

如果您询问是否所有内容都在堆栈上分配,那么答案(在 Java 中)是:不 - 这是不正确的。

例如array = new char[size]从堆中分配 char 数组。在 Java中new 总是从堆中分配。

事实上,我认为你不能用 Java 编写这个程序……鉴于这些限制。尝试 C 或 C++。

于 2013-03-12T13:01:49.883 回答