繁体   English   中英

使用动态数组实现堆栈

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM