0

データ構造とアルゴリズムに関するプログラミングの割り当てがあり、タスクの 1 つは

「実行時に文字スタック (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 に答える