数据结构——栈以及堆栈溢出

作者: LuDSh | 来源:发表于2017-09-18 13:30 被阅读381次

关于栈stack,基本概念,今天主要说一下,调用栈call stack以及递归。

堆栈:是计算机科学,其特殊之处在于只能允许在链接串列或阵列的一端(top)进行加入数据(push)和输出数据(pop)的运算。特点是:后进先出,除头尾节点之外,每个元素有一个前驱,一个后继。

那么什么是调用栈呢?

官方的概念就不说了,函数的调用使用到的就是调用栈,经常用于存放程序的返回地址。

这个函数的调用过程是这样:

在递归中就用到了调用栈,先用递归实现一下阶乘,然后我们看以下调用的过程。

调用的过程:

从图中我们可以看到,在递归的过程中,需要占用内存的调用栈会越来越多,那么如果是一个无线递归的函数,势必会面临栈溢出的问题,当然了即便不是无限的,层数太多的话也会面临堆栈溢出的问题。因此在使用递归函数的时候,需要注意基线条件和调用条件的书写,基线条件保证不会出现无限递归的情况。

如果出现栈溢出应该怎么办?两种方法:1.使用循环;2.尾递归

相关文章

  • 数据结构——栈以及堆栈溢出

    关于栈stack,基本概念,今天主要说一下,调用栈call stack以及递归。 堆栈:是计算机科学,其特殊之处在...

  • 栈以及堆栈溢出

    转载,详见原文:https://www.jianshu.com/p/3ce97d80436a 关于栈stack,基...

  • 通俗易懂:C语言中内存堆和栈的区别

    数据结构的栈和堆 首先在数据结构上要知道堆栈,尽管我们这么称呼它,但实际上堆栈是两种数据结构:堆和栈。 堆和栈都是...

  • 四、栈与队列(Stack and Queue)

    一、栈(Stack) 栈(stack),也可以叫做堆栈,是一种容器类型的数据结构,可以存入数据元素、访问元素以及删...

  • 堆栈

    #什么是“堆”,"栈","堆栈","队列",它们的区别 如果你学过数据结构,就一定会遇到“堆”,"栈","堆栈",...

  • 理解内存管理

    • 堆和栈 内存泄露、野指针 堆和栈是逻辑分区也是物理分区。Stack Overflow,堆栈溢出是一起溢出的。堆...

  • javascript第4讲:堆栈,垃圾回收

    1.堆中存放的是变量地址,栈中存中的是值 2.堆栈溢出 当存储的数据达到一定限制时就会造成堆栈溢出,但是栈中会自动...

  • 堆栈基础(一)

    新手入门pwn之栈溢出系列,先学习堆栈的基础,函数调用栈这些. 运行时栈 运行时栈(runtime stack)是...

  • 05--栈 递归

    栈 栈(Stack)又名堆栈,它是一种重要的数据结构。从数据结构角度看,栈也是线性表,其特殊性在于栈的基本操作是线...

  • 数据结构与算法 (栈实现篇)

    数据结构与算法 (栈实现篇) 在数据结构与算法中,栈(stack)又名堆栈,栈是一种受限的线性储存结构,只允许在一...

网友评论

    本文标题:数据结构——栈以及堆栈溢出

    本文链接:https://www.haomeiwen.com/subject/xqovsxtx.html