【问题标题】:How Stack Overflow occur if we use linked list for stack implementation?如果我们使用链表进行堆栈实现,堆栈溢出是如何发生的?
【发布时间】:2016-05-25 05:24:24
【问题描述】:

我是堆栈新手。众所周知,如果堆栈空间不足,我们想将一个元素压入堆栈,则堆栈将处于溢出状态。当我们使用基于数组的堆栈实现时会发生这种情况,因为我们必须定义数组的容量。如果我们要推送一个超出容量的元素,就会发生溢出,但是如果我们使用链表进行堆栈实现,那么堆栈溢出将如何发生?在链表中我们需要不定义任何容量,它为节点动态分配内存。请帮助我识别问题。提前致谢。

【问题讨论】:

    标签: stack structure overflow


    【解决方案1】:

    我建议使用链表。据我所知,链表中没有堆栈溢出。这就是为什么我们使用该数据结构而不是像列表、堆栈这样的数组实现。链表的实现很长(但您可以使用预定义的库)和高缓存使用率。但它适合保存动态大小的数据,因为它具有 为节点动态分配内存 的属性,如上所述。
    希望这会有所帮助!

    【讨论】:

    • 谢谢@Rahal。这意味着如果我们使用链表,则不会发生堆栈溢出。
    • @user2779650: 当然可以
    【解决方案2】:

    你说得对,链表不需要根据元素的数量来定义它的容量。但是元素仍然需要内存 - 并且可能会发生内存耗尽。

    将堆栈实现作为列表执行会导致性能下降(因为分配/解除分配必须更频繁地完成),如果您认为必须在堆栈上分配不同大小的内存块,则更加复杂。堆栈的使用如此广泛,以至于其实施中的任何放缓都可能令人望而却步。

    列表的管理也更难 - 你必须管理堆栈,例如一次添加多个元素,或在一次操作中“缩短”堆栈(获取/忘记其上的多个元素,例如从函数调用返回时)等。单向列表仅适用于在其上附加/删除一个元素结束。

    你有什么具体的问题要解决吗?请记住,堆栈溢出不仅可能发生在在其上创建的大型数据结构中,还可能发生在递归太深的情况下。

    【讨论】:

    • 不,这只是我的好奇心。但是如果链表速度较慢,那么实现堆栈将是完美的。
    猜你喜欢
    • 1970-01-01
    • 2020-08-09
    • 2019-05-18
    • 2011-07-29
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 2012-01-12
    相关资源
    最近更新 更多