Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.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
C++ 用动态数组实现堆栈_C++_Stack - Fatal编程技术网

C++ 用动态数组实现堆栈

C++ 用动态数组实现堆栈,c++,stack,C++,Stack,假设我们使用动态分配的数组实现堆栈。如果数组已填充,则我们将 面临困境。从以下选项中,选择最能说明问题的选项 我们处理填充阵列的策略 (a) 我们声明了一个新数组,是 与原始数据一样大,并复制数据 进入新空间的总成本为 O(n),在n次推压的序列上 (b) 我们声明另一个数组并保留 跟踪两个(或更多)中的哪一个 数组包含当前的 堆栈的私有成员中的堆栈 班级。每推一次,我们将花费0(1)美元 (c) 对于某些固定k,我们创建一个新的 大小为n+2^k的数组,并复制 将数据放入新空间进行平均 每次推

假设我们使用动态分配的数组实现堆栈。如果数组已填充,则我们将 面临困境。从以下选项中,选择最能说明问题的选项 我们处理填充阵列的策略

(a) 我们声明了一个新数组,是 与原始数据一样大,并复制数据 进入新空间的总成本为 O(n),在n次推压的序列上

(b) 我们声明另一个数组并保留 跟踪两个(或更多)中的哪一个 数组包含当前的 堆栈的私有成员中的堆栈 班级。每推一次,我们将花费0(1)美元

(c) 对于某些固定k,我们创建一个新的 大小为n+2^k的数组,并复制 将数据放入新空间进行平均 每次推送操作的成本为0(1)

(d) 我们避免实现堆栈 使用动态分配的数组, 因为不得不这样做是没有效率的 重新分配内存

(e) 这些答案没有一个是正确的 合理的回应


我很确定正确的答案是a,但我不明白为什么这是最好的答案?其他的都是实用的吗?在我看来,它们还不错。例如,
c
与'a,no'几乎是一回事?为什么翻一番比增加一个固定的数量更有优势?其他的选择呢?为什么不起作用

假设您的堆栈有128个元素,最后不得不在其中存储4096个元素。每次将数组加倍或扩展128个项目时,需要调整数组大小多少次?

这看起来像是家庭作业,可能是带回家的测试,所以我会故意在答案中遗漏一些内容

a) 试图为
O(n)
索赔提供证据。与b)的证明进行比较

b) 如何存储正在使用的子阵列集?(乌龟一路下来。)

c) 试图为
O(1)
断言提供证据。与你的证据进行比较(a)

d) 所有替代方案都有其自身的低效性。比较一下。请注意,在实时编程中,不能使用动态重新分配的数组,必须使用类似链表的内容。为什么?


e) 如果上述任何一项都是合理的,那么这就完全是错误的。反之亦然。

为什么加倍更有利:嗯……顺势?回家考试?@Alex-允许做家庭作业,但答题方式不同(至少对我来说是这样)。@Alex-我已经做了。我不认为@bitmoe试图隐藏它,只是没有这样标记。其实这不是家庭作业。这是我为即将到来的考试复习的一道旧题。我已经知道答案是a,因为我们在复习时已经看过了,但我没有真正理解原因。我把它贴在这里希望得到澄清。