堆栈数据存储顺序

时间:2010-06-13 22:41:24

标签: language-agnostic data-structures stack

当谈论计算或“真实”生活中的堆栈时,我们通常会假设“先开后关”类型的功能。

因为堆栈的概念是基于物理世界中的某些东西,所以堆栈中的数据是如何存储的呢?

我注意到很多例子中堆栈数据的存储通常是使用数组完成的,并且添加到堆栈的最新项目放在数组的底部。 (比如将新盘子添加到现有的一叠盘子上,除了将它放在其他盘子下面而不是顶部)。

作为一种范例,只要堆栈的操作按预期运行,数据在堆栈中的存储顺序是否重要?

3 个答案:

答案 0 :(得分:0)

不是真的。然而,由于将推送项目移动到任何其他位置没有计算优势(通常),线性结构(可以提供对堆栈的当前“顶部”的快速访问)与任何事物一样有效。阵列在性能和紧凑性方面满足堆栈结构的需求,因此它通常是最好/最明显的选择。

答案 1 :(得分:0)

只要功能和性能符合预期,将数据存储在内存中的方式无关紧要。

堆栈通常实现为具有大小和容量的数组,其中size是当前堆栈中元素的数量,容量是可以存储的最大数量,而不需要相对昂贵的内存重新分配。

当需要为插入提供摊销的O(1)性能时,容量通常会翻倍。通常更容易使用数组的高索引端的空白空间来实现堆栈,因此这是通常所做的。

举一个具体的例子,堆栈的当前顶部可以作为索引存储到顶部元素的数组中。如果项目向下添加到数组的最高索引,那么当数组增加以为更多元素腾出空间时,数组顶部的索引也会改变。当从底部填充时,当需要调整数组大小时,顶部元素的索引不会改变。

如果您想以不同方式实现堆栈,可以这样做,只需确保记录实现的功能和性能。

答案 2 :(得分:0)

作为范例,不,不是真的。作为低级实现细节,向下增长的堆栈具有轻微的优势,即堆栈上的项目可以使用正偏移从当前堆栈指针寻址(例如,这可能对某些CPU架构有用)。 p>