使用动态数组实现堆栈

时间:2011-04-05 02:57:07

标签: c++ stack

假设我们使用动态分配的数组实现堆栈。如果数组填充,我们是 面临两难选择。从以下选项中,选择最佳描述的选项 我们处理填充数组的策略。

  

(a)我们声明一个新数组,两次   像原来一样大,并复制数据   进入新的空间总费用   O(n),超过一系列n推。

     

(b)我们声明另一个数组并保持   跟踪两个(或更多)中的哪一个   数组包含当前的顶部   堆栈在堆栈的私有成员中   类。每次推动我们花费O(1)。

     

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

     

(d)我们避免实现堆栈   使用动态分配的数组,   因为它必须是低效的   重新分配记忆。

     

(e)这些答案都不是   合理的回应。

我很确定正确的答案是,但我不明白为什么那会是最好的答案呢?其他人是否实用?他们似乎对我好。例如,c几乎与`a,no?相同?为什么加倍有利然后增加一定数量呢?其他选择怎么样 - 为什么他们不工作?

2 个答案:

答案 0 :(得分:3)

假设您的堆栈是128个元素,并且您最终必须在其中存储4096个元素。你需要多少倍才能调整数组的大小,每次加倍,每次扩展128个项目?

答案 1 :(得分:1)

这看起来像是家庭作业,也可能是带回家的考试,所以我会故意留下一些答案。

a)尝试为O(n)声明提供证据。与b)的证据比较。

b)如何存储使用的子阵列? (它一直是乌龟。)

c)尝试为O(1)断言提供证据。与a)的证明相比较。

d)所有替代方案都有其低效率。比较他们。请注意,在实时编程中,您不能使用动态重新分配的数组,并且必须使用类似链接列表的内容。为什么呢?

e)如果上述任何一项是合理的,这是微不足道的。反之亦然。