Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
堆栈的动态空间分配(JAVA)_Java_Oop_Dynamic_Stack - Fatal编程技术网

堆栈的动态空间分配(JAVA)

堆栈的动态空间分配(JAVA),java,oop,dynamic,stack,Java,Oop,Dynamic,Stack,我有一个关于数据结构和算法的编程任务,其中一个任务是 在运行时提示用户输入字符堆栈(M)的大小,并在系统堆栈中为用户堆栈动态分配空间。您尤其不能使用“new,malloc”或任何其他以任何语言在堆中分配空间的运算符。 我不熟悉数据结构,想知道我编写的以下代码是否符合要求 代码: 从技术上讲,我在非静态方法中使用的任何东西都必须分配到新的系统堆栈中,而不是堆中,对吗 从技术上讲,我在非静态方法中使用的任何东西都必须分配到新的系统堆栈中,而不是堆中,对吗 如果您询问是否将在堆栈上分配所有内容,那么答

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

在运行时提示用户输入字符堆栈(M)的大小,并在系统堆栈中为用户堆栈动态分配空间。您尤其不能使用“new,malloc”或任何其他以任何语言在堆中分配空间的运算符。

我不熟悉数据结构,想知道我编写的以下代码是否符合要求

代码:

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

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

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

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

事实上,我不认为你能用Java写这个程序。。。鉴于这些限制。尝试C或C++。 从技术上讲,我在非静态方法中使用的任何东西都必须分配到新的系统堆栈中,而不是堆中,对吗

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

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


事实上,我不认为你能用Java写这个程序。。。鉴于这些限制。尝试C或C++。< /P>指定的任务“你可以使用C++,艾达,Perl,java,php,COBOL。”我想教授犯了一个错误。本来是我的答案,但是最好是作为对你的答案的评论。@利纳加里福林-我认为有必要向教授澄清这一点。也许他的意思是说单个堆栈单元不能在堆上分配。但从表面上看,这似乎是个错误。(这当然是一个相当“有趣”的语言组合…)刚刚和我的教授谈过。他说有几个学生已经完成了实验,这是很有可能的。所以我很抱歉我不能接受这个答案。这个作业特别提到“你可以使用C++,艾达,Perl,java,php,和COBOL”。我想教授犯了一个错误。本来是我的答案,但是最好是作为对你的答案的评论。@利纳加里福林-我认为有必要向教授澄清这一点。也许他的意思是说单个堆栈单元不能在堆上分配。但从表面上看,这似乎是个错误。(这当然是一个相当“有趣”的语言组合…)刚刚和我的教授谈过。他说有几个学生已经完成了实验,这是很有可能的。很抱歉,我不能接受答案..因为您正在
array=new char[size]中使用
new
运算符您的代码不符合要求。因为您正在
array=new char[size]中使用
new
运算符您的代码不符合要求。
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);
        }
    }
}