C++ 用动态数组实现堆栈
假设我们使用动态分配的数组实现堆栈。如果数组已填充,则我们将 面临困境。从以下选项中,选择最能说明问题的选项 我们处理填充阵列的策略 (a) 我们声明了一个新数组,是 与原始数据一样大,并复制数据 进入新空间的总成本为 O(n),在n次推压的序列上 (b) 我们声明另一个数组并保留 跟踪两个(或更多)中的哪一个 数组包含当前的 堆栈的私有成员中的堆栈 班级。每推一次,我们将花费0(1)美元 (c) 对于某些固定k,我们创建一个新的 大小为n+2^k的数组,并复制 将数据放入新空间进行平均 每次推送操作的成本为0(1) (d) 我们避免实现堆栈 使用动态分配的数组, 因为不得不这样做是没有效率的 重新分配内存 (e) 这些答案没有一个是正确的 合理的回应C++ 用动态数组实现堆栈,c++,stack,C++,Stack,假设我们使用动态分配的数组实现堆栈。如果数组已填充,则我们将 面临困境。从以下选项中,选择最能说明问题的选项 我们处理填充阵列的策略 (a) 我们声明了一个新数组,是 与原始数据一样大,并复制数据 进入新空间的总成本为 O(n),在n次推压的序列上 (b) 我们声明另一个数组并保留 跟踪两个(或更多)中的哪一个 数组包含当前的 堆栈的私有成员中的堆栈 班级。每推一次,我们将花费0(1)美元 (c) 对于某些固定k,我们创建一个新的 大小为n+2^k的数组,并复制 将数据放入新空间进行平均 每次推
我很确定正确的答案是a,但我不明白为什么这是最好的答案?其他的都是实用的吗?在我看来,它们还不错。例如,
c
与'a,no'几乎是一回事?为什么翻一番比增加一个固定的数量更有优势?其他的选择呢?为什么不起作用 假设您的堆栈有128个元素,最后不得不在其中存储4096个元素。每次将数组加倍或扩展128个项目时,需要调整数组大小多少次?这看起来像是家庭作业,可能是带回家的测试,所以我会故意在答案中遗漏一些内容
a) 试图为O(n)
索赔提供证据。与b)的证明进行比较
b) 如何存储正在使用的子阵列集?(乌龟一路下来。)
c) 试图为O(1)
断言提供证据。与你的证据进行比较(a)
d) 所有替代方案都有其自身的低效性。比较一下。请注意,在实时编程中,不能使用动态重新分配的数组,必须使用类似链表的内容。为什么?
e) 如果上述任何一项都是合理的,那么这就完全是错误的。反之亦然。为什么加倍更有利:嗯……顺势?回家考试?@Alex-允许做家庭作业,但答题方式不同(至少对我来说是这样)。@Alex-我已经做了。我不认为@bitmoe试图隐藏它,只是没有这样标记。其实这不是家庭作业。这是我为即将到来的考试复习的一道旧题。我已经知道答案是a,因为我们在复习时已经看过了,但我没有真正理解原因。我把它贴在这里希望得到澄清。