首先,讨论的堆和栈指的是内存中的“堆区”和“栈区”。C语言的内存模型分为5个区:栈区、堆区、静态区、常量区、代码区。每个区存储的内容如下:
1、栈区:存放函数的参数值、局部变量等,由编译器自动分配和释放,通常在函数执行完后就释放了,其操作方式类似于数据结构中的栈。栈内存分配运算内置于CPU的指令集,效率很高,但是分配的内存量有限,比如iOS中栈区的大小是2M。
2、堆区:就是通过new、malloc、realloc函数分配的内存块,编译器不会负责它们的释放工作,需要用程序区释放。在iOS开发中所说的“内存泄漏”说的就是堆区的内存。
3、静态区:全局变量和静然后态变量(在iOS中就是用static修饰的局部变量或者是全局变量)的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后,由系统释放。
4、常量区:常量存储在这里,不允许修改。
5、代码区:存放函数体的二进制代码。
其次,谈谈什么是线性表
线性,是说数据在逻辑结构上具有线性关系。将具有线性关系的数据存储到计算机中所使用的存储结构称为线性表。通俗的讲就是:每个数据元素,在它的前面可以找到唯一一个数据和它挨着,后面也只有一个数据和它挨着。这样,数据在逻辑结构呈线性分布,称这样的存储结构为线性表。
线性表中存储的数据本身的类型一定保持相同,是int型就都是int型,是结构体就都是一种结构体。
数据一旦用线性表存储,各数据元素在逻辑结构上的前后次序就固定了。

线性表中的数据元素、数据项、记录和文件
在线性表中,无论数据本身由多少种数据类型(每一种被称为一个“数据项”)组成,每一条数据被称为“数据元素”。如果数据元素本身包含的数据项非常多,就可以称这个数据元素为一个“记录”,多条记录组成一个“文件”。
最后聊聊线性表和队列
线性表是首尾相接的(每个节点都有两块空间,一个是存要存的数据一块是前一个节点所在存储空间的地址),就是后一个存着前一个所在的地址(也就是指针指向前一个)存储空间不是固定连续的;
栈和队列是连续的一段空间,栈就像一个铁桶,有底无盖,先进去的就只能被压在最低下,最后才能取出来(假如是存满一次再全取出的话);
队列是一根管子,大家排队钻进去,先钻进去的就先从另一端出来。
网友评论