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

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

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

那么什么是调用栈呢?

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

数据结构——栈以及堆栈溢出_第1张图片

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

数据结构——栈以及堆栈溢出_第2张图片

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

数据结构——栈以及堆栈溢出_第3张图片

调用的过程:

数据结构——栈以及堆栈溢出_第4张图片

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

数据结构——栈以及堆栈溢出_第5张图片

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

你可能感兴趣的:(数据结构——栈以及堆栈溢出)