
数据结构
lxhguard
腾讯前端
展开
-
函数调用--函数栈
函数调用大家都不陌生,调用者向被调用者传递一些参数,然后执行被调用者的代码,最后被调用者向调用者返回结果,还有大家比较熟悉的一句话,就是函数调用是在栈上发生的,那么在计算机内部到底是如何实现的呢? 对于程序,编译器会对其分配一段内存,在逻辑上可以分为代码段,数据段,堆,栈代码段:保存程序文本,指令指针EIP就是指向代码段,可读可执行不可写数据段:保存初始化的全局变量和静态变量,可读可写不可执行BS...转载 2018-05-26 20:25:19 · 341 阅读 · 0 评论 -
python 递归函数 栈溢出
题目:计算阶乘n!=n*(n-1)*(n-2)*…3*2*1用递归函数来表示为:def f(x): if x==1: return 1 return x*f(x-1)代码截图运行结果计算5的阶乘5!,运行正确。接着计算大一点的数1000!:代码截图运行结果运行结果可以看到运行结果报错了,这是因为出现了栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每...转载 2018-05-26 20:50:05 · 1959 阅读 · 0 评论 -
栈和堆的理解
内存存储数据程序运行的时候,操作系统会给它分配一段内存,用来储存程序和运行产生的数据。这段内存有起始地址和结束地址起始地址是较小的那个地址,结束地址是较大的那个地址。堆(heap) 从低位到高位分配占据内存空间 用户通过动态的内存占用请求(如malloc命令,新建对象) 必须手动释放或通过垃圾回收机制来回收(不会自动消失) 先...原创 2018-05-26 21:01:45 · 863 阅读 · 0 评论 -
浅谈栈帧
一、 什么是栈帧?什么是栈帧,首先引用百度百科的经典解释:“栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。实际上,可以简单理解为:栈帧就是存储在用户栈上的(当然内核栈同样适用)每一次函数调用涉及的相关信息的记录单元。也许这样感觉更复杂了,好吧,让我们从栈开始来理解什么是栈帧...栈帧表示程序的函数调用记录,而栈帧又是记录在栈上面,很明显栈上保持了N个栈帧的实体,那就可以说栈帧...转载 2018-05-26 21:11:40 · 475 阅读 · 0 评论 -
递归及尾递归优化
1、递归介绍递归简而言之就是自己调用自己。使用递归解决问题的核心就是分析出递归的模型,看这个问题能拆分出和自己类似的问题并且有一个递归出口。比如最简单的就5的阶乘,可以把它拆分成5*4!,然后求4!又可以调用自己,这种问题显然可以用递归解决,递归的出口就是求1!,可以直接返回1。用Python实现如下:[python] view plain copydef fact(n): if n==...转载 2018-05-26 21:16:51 · 1054 阅读 · 0 评论 -
数据结构----基础概念
数据:描述客观事物的数值,字符以及能输入到计算机中且能被处理的各种符号集合。 数据元素:由一个或多个数据项(数据的最小单位)组成,是数据集合的个体,在计算机中通常作为一个整体进行考虑。 数据类型:一组性质相同的值集合以及定义在这个值集合上的一组操作的总称。 数据结构:互相之间存在一种或多种特定关系的数据元素集合。 逻辑结构:数据元素之间逻辑关系的描述。 存储结构:研究数据元素之间的关系如...原创 2018-09-04 20:30:53 · 189 阅读 · 0 评论