我是筹码的新手。我们知道,如果堆栈中没有足够的空间并且我们想要将一个元素推入堆栈,那么堆栈将处于溢出状态。当我们使用基于数组的堆栈实现时会发生这种情况,因为我们必须定义数组的容量。如果我们想要推送一个超过容量的元素,那么溢出会发生但如果我们使用链表进行堆栈实现那么堆栈溢出将如何发生?在链表中我们不需要定义任何容量,它为节点动态分配内存。请帮我认识一下这个问题。提前谢谢。
答案 0 :(得分:0)
你是对的,通过链表,没有必要根据元素的数量来定义它的容量。但是元素仍然需要记忆 - 并且内存耗尽可能发生。
将堆栈实现作为列表执行将导致性能降低(因为分配/解除分配必须更频繁地完成),如果您考虑必须在堆栈上分配不同大小的内存块,则会更复杂。堆栈的使用范围非常广泛,以至于其实施中的任何减速都可能令人望而却步。
列表管理也更难 - 你必须管理堆栈,例如一次添加多个元素,或者缩短'一次操作中的堆栈(取/忘记多个元素,例如从函数调用返回时)等。单向列表只能在其末尾附加/删除一个元素。
您要解决的是否有任何具体问题?请记住,堆栈溢出不仅可能发生在其上创建的大型数据结构,而且还会发生过长的递归。
答案 1 :(得分:0)
我建议使用Linked List。据我所知,链接列表中没有Stack Overflows。这就是为什么我们使用数据结构而不是像Lists,Stacks这样的数组实现。链表的实现很冗长(但您可以使用预定义的库)和高缓存使用率。但它适合保存动态大小的数据,因为它具有为节点动态分配内存的属性,如上所述。
希望这有帮助!