数据结构大的分类
- 线性表:结构种数据按照线性结构排列,常见的有数组,链表,栈
- 数:结构中数据交错有着某种关系,有父节点,子节点,类似一棵树的结构,主要分为两大类,二叉树和图
- 散列表:
- 集合:
数据结构小分类及特点
- Array: 数组,使用连续的内存来存储,元素可通过下标访问,
- Queue: 队列,先进先出
- Set: 集合,保存不重复的元素
- Stack: 栈,先进后出,只有一个口
- Heap: 堆,近似完全二叉树的数据结构
- Map: 字典,关联数组,键值对
- List: 线性表
- LinkedList: 链表,线性表的一种
- Graph: 图
js的栈内存和堆内存
- JS的内存空间分为栈(stack)、堆(heap)、池(一般也会归类为栈中)。其中栈存放变量,堆存放复杂(引用)对象,池存放常量,所以也叫常量池。
- 栈和堆内存的优缺点
- 在JS中,基本数据类型变量大小固定,并且操作简单容易,所以把它们放入栈中存储。 引用类型变量大小不固定,所以把它们分配给堆中,让他们申请空间的时候自己确定大小,这样把它们分开存储能够使得程序运行起来占用的内存最小。栈内存由于它的特点,所以它的系统效率较高。 堆内存需要分配空间和地址,还要把地址存到栈中,所以效率低于栈。
- 闭包中的变量并不保存中栈内存中,而是保存在堆内存中。 这也就解释了函数调用之后之后为什么闭包还能引用到函数内的变量。
- 我们知道const关键字用来定义一个常量,const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动,一一对应,不可变