第18课-栈与递归

C语言中的疑惑

讨论中……

小A:C语言中常说“局部变量在栈上分配空间”,那么这个地方的“栈”和我们之前学习的栈数据结构有关系吗?

小B:我觉得应该没关系吧 :我觉得应该没关系吧,只是名称碰巧一致而已吧?!

1. 函数调用时的栈

(1)程序中的“函数调用栈”是栈数据结构的一种应用。

(2)函数调用栈一般是从高地址向低地址增长的。

l  栈底为内存的高地址处。

l  栈顶为内存的低地址处。

(3)函数调用栈中存储的数据为活动记录

2. 活动记录

活动记录是函数调用时一系列相关信息的记录。

3. 函数调用过程

4. 程序中的栈

(1)      程序中的栈空间可看做一个顺序栈的应用。

(2)      栈保存了一个函数调用所需的维护信息。

(3)      函数参数,函数返回地址 ,函数返回地址。

l  局部变量。

l  函数调用上下文。

5. 栈的溢出

(1)      在不断的压栈过程中造成栈空间耗尽而产生栈溢出。

(2)      栈溢出常由于函数递归过深或局部数组过大造成。

#include <stdio.h>

void reverse(char* s)

{

if( (s != NULL) && (*s != '\0') )

{

reverse(s + 1);

printf("%c", *s);

}

}

int main()

{

reverse("12345");

printf("\n");

return 0;

}

运行结果:54321

分析:第一次的递归*s指向的是1,之后一次是2,3,4,5。这些结果一次进栈。这些的递归是以reverse(s + 1);为界限的,当所有的文件递归结束后,再让我们之前指向的数据依次出栈。所以我们看到的最后结果是54321。我们这里要明白一点,那就是递归函数是要进栈的。

小结

(1)程序栈空间在本质上是一种顺序栈。

(2)程序栈空间的访问是通过函数调用进行的。

(3)程序栈空间仍然遵从后进先出的规则。

转载于:https://www.cnblogs.com/free-1122/p/11322800.html

数据-第18课-栈与递归相关推荐

  1. ssm插入数据时候栈溢出_程序员算法与数据结构基础中的基础,栈与递归

    在此之前,我们介绍了动态规划.深度优先搜索等基础算法,但是,有部分好友评论说,难度太难了,我们知道动态规划的自顶向下跟深度优先搜索一般都用递归实现,今天我们就先来讲讲算法与数据结构中,基础中的基础递归 ...

  2. 元宇宙大数据人工智能三维电子沙盘数字沙盘元宇宙大数据人工智能无人机倾斜摄影三维全景建模第18课

    元宇宙大数据人工智能三维电子沙盘数字沙盘元宇宙大数据人工智能无人机倾斜摄影三维全景建模第18课 上一节我们实现了模型的移动控制.这次我们来实现模型的材质控制,首先我们找一个模型.在3dmax中如下: ...

  3. 数据结构与算法:09 栈与递归

    09 栈与递归 知识结构: 栈是我们经常使用的一种数据结构,比如,手枪发射子弹的顺序与子弹压入弹夹的顺序是相反,即后压入弹夹的子弹先发射出来.又比如,我们使用的Word.Excel.Photoshop ...

  4. Datawhale组队学习 Task03:栈与递归(2天)

    Task03:栈与递归(2天) 栈是我们经常使用的一种数据结构,如下图所示,手枪发射子弹的顺序与子弹压入弹夹的顺序是相反,即后压入弹夹的子弹先发射出来. 比如我们使用的Word.Excel.Photo ...

  5. 先来先服务算法代码_程序员算法与数据结构基础中的基础,栈与递归

    在此之前,我们介绍了动态规划.深度优先搜索等基础算法,但是,有部分好友评论说,难度太难了,我们知道动态规划的自顶向下跟深度优先搜索一般都用递归实现,今天我们就先来讲讲算法与数据结构中,基础中的基础递归 ...

  6. 九、【栈和队列】栈和递归

    栈和递归 栈的另外一个重要应用就是在程序设计语言中实现递归. 1 递归 Recursion 简单来说,递归就是直接调用自身或通过一系列调用语句间接调用自身的一种编程技巧或方法,使用递归来实现的函数被称 ...

  7. LQ训练营(C++)学习笔记_栈与递归

    栈与递归 二.栈与递归 1.栈的概念 2.代码实现栈的数据结构 3.栈stack< T >的方法总结 4.火车出入站问题 5.递归的概念 6.递归方法求n的阶乘 7.汉诺塔问题 二.栈与递 ...

  8. 算法9---二叉树的遍历不用栈和递归

    二叉树的遍历不用栈和递归 转自:ACM之家 http://www.acmerblog.com/inorder-tree-traversal-without-recursion-and-without- ...

  9. 数据结构之栈与递归的实现及应用(斐波拉契数列递归解法和strlen递归解法)

    栈与递归 程序中的"函数调用栈"是栈数据结构的一种应用. 函数调用栈一般是从高地址向低地址增长的,栈底为内存的高地址处,栈顶为内存的低地址处. 函数调用栈中存储的数据为活动记录.活 ...

  10. 数据结构(C语言版)之栈及递归

    目录 前言 正文 一.栈 1.栈的概念及术语 1.定义 2.逻辑结构 3.存储结构 4.运算规则 5.实现方式 6.栈是一种特殊的线性表,它的逻辑结构和存储结构与线性表相同,其特殊性体现在" ...

最新文章

  1. vectorbool不是容器
  2. 网易SRC指责白帽子私自披露已修复漏洞,强势表态违刑必究
  3. java窗口坐标_如何在Java中获取窗口外部的鼠标单击坐标
  4. MySQL--区分表名大小写
  5. windows下利用IIS搭建web和ftp服务以及防火墙配置
  6. 动态规划-时间规整算法
  7. [在职软件工程]面向对象的分析与设计
  8. 计算机视觉教程0-3:为何拍照会有死亡视角?详解相机矩阵与畸变
  9. Invalid arguments ' Candidates are: int fseek(__sFILE *, long int, int) '
  10. Select, Supplement and Focus for RGB-D Saliency Detection CVPR2020 卢湖川团队
  11. 微信进入公众号提示服务器错误,微信登录公众号提示没有权限访问解决教程
  12. 冯·诺依曼体系结构的学习总结
  13. deadline(deadline是什么意思)
  14. 【机器学习】自然语言处理简介
  15. matlab21世纪论坛,compressive sensing 压缩感知(转) 21世纪最火的研究方向
  16. C++设计:关于CMatrix类的相关操作
  17. 主域名与子域名的区别
  18. Chromium架构
  19. 统计分析 -- 正态分布
  20. gmv和销售额的区别是什么?

热门文章

  1. 阿里超大规模 Flink 集群运维体系介绍
  2. Kotlin实战【五】Kotlin中的异常
  3. 把3000行代码重构成15行的牛逼操作!!!
  4. oracle数据tsql,Tsql 下建立oracle数据库步骤
  5. 曙光服务器怎么进入bios_曙光服务器怎么进入bios
  6. linux子目录大小限制,如何解决linux子目录的数量限制?
  7. 山西2019数据结构专升本_喜讯!临汾这个学院专升本通过率创新高
  8. Executesql 实例及介绍
  9. Go by Example练习
  10. CUPS-Centos6-dockerfile