1. 链表:
  2. 链表中的元素在内存中不必是连续的空间
  3. 链表的每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(有些语言称为指针或者链接)组成
  4. 线性表:小朋友排队就像是一条链子,而线性表就跟这个链子一样,小朋友=>数据元素,线性表:0个或者多个数据元素有序的有限数列
  5. 线性表两种存储方式:
  6. 物理的存储机构:
  7. 1、顺序存储
  8. 用一段连续的存储单元依次存储线性表的数据元素。
  9. 2、链式存储
  10. 内存地址可以是连续的也可以是不连续的。把数据元素存放在任意的存储单元里,指针来存放数据元素的地址

image.png

  1. 结论:
  2. 1、插入删除:链表性能好
  3. 链表没有大小限制,支持动态扩容,因为链表的每个节点都需要存储前驱/后驱节点的指针,内存消耗会翻倍
  4. 2、查询修改:数组性能好

原型链

  1. JS是基于对象设计和开发出来的语言
  2. 面向对象有三大特点:(封装,继承,多态)
  3. “基于对象”是使用对象,但是我们无法利用现有的对象模板去产生新的对象类型,继而去产生一个新的对象,也就是说“基于对象”是没有继承的特点,但是面向对象实现了继承和多态,基于现象是没有实现这些的。
  4. oop面向对象的支持两种继承方式:接口继承,实现继承
  5. ECMAScript是无法去实现去接口继承的,JS只支持实现继承,实现继承主要依靠原型链去实现
  6. prototypeproto
  7. 1、所有的引用类型(数组、函数、对象)可以自由扩展的属性(null除外)
  8. 2、所有的引用类型都有一个proto属性(隐式原型,他其实就是一个普通的对象)
  9. 3、所有的函数都有一个prototype属性(显式原型,他也是一个普通的对象)
  10. 4、所有的引用类型,它的proto属性指向他的构造函数的prototype属性
  11. 5、当视图得到一个对象的属性时,如果这个对象的本身不存在这个属性,会通过它的proto属性去寻找(去他的构造函数的prototype属性)中去找
  12. 当调用这个对象本身并不存在的属性或者是方法时,他会一层一层往上找,一直找到null为止,null表示为空对象