[英]Stack implemented with dynamic array
假设我们使用动态分配的数组实现堆栈。 如果阵列填满,我们将面临两难选择。 从以下选项中,选择最能描述我们处理填充数组的策略的选项。
(a)我们声明一个新的数组,是原始数据的两倍,并在一系列n次推送中将数据复制到新空间中,总成本为O(n)。
(b)我们声明另一个数组,并跟踪堆栈类的私有成员中两个(或更多)数组中的哪一个包含堆栈的当前顶部。 每次推动我们花费O(1)。
(c)对于某些固定的k,我们创建一个大小为n + 2 ^ k的新数组,并将数据复制到新空间中,每次推送操作的平均成本为O(1)。
(d)我们避免使用动态分配的数组实现堆栈,因为必须重新分配内存是低效的。
(e)这些答案都不是合理的答复。
我很确定正确的答案是,但我不明白为什么那会是最好的答案呢? 其他人是否实用? 他们似乎对我好。 例如, c
与`a,no?几乎相同? 为什么加倍有利然后增加一定数量呢? 其他选择怎么样 - 为什么他们不工作?
假设您的堆栈是128个元素,最后您必须在其中存储4096个元素。 你需要多少倍才能在加倍时将数据调整为每次扩展128个项目?
这看起来像是家庭作业,也可能是带回家的考试,所以我会故意留下一些答案。
a)尝试为O(n)
索赔提供证据。 与b)的证据比较。
b)如何存储使用的子阵列? (它一直是乌龟。)
c)尝试为O(1)
断言提供证据。 与您的a)证明相比较。
d)所有替代方案都有其低效率。 比较他们。 请注意,在实时编程中,您不能使用动态重新分配的数组,并且必须使用类似链接列表的内容。 为什么?
e)如果上述任何一项是合理的,这是微不足道的。 反之亦然。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.