D2 认识链表结构

  • 链表和数组一样,可以用于存储一些元素,但链表和数组的实现机制不一样
  • 链表:一种用于存储数据的线性结构(py)
  • 数组:可存储多个元素,最常见
  • 每一种编程语言,都有默认实现数组结构
  • 数组缺点:

    • 数组的创建需要申请一段连续的内存空间(一整块内存),并且大小是固定的,(大多编程语言数组都是固定的),所以数组不能满足容量需求时,需要扩容,非常消耗性能(一般申请更大的数组,比如2倍。然后将原数组的元素复制过去)
    • 在数组的开头/中间插入元素成本很高,需要大量元素位移
    • 尽管JS数组API可以实现,但背后的原理依旧是这样。
  • 链表:

    • 要存储多个元素,另一种选择就是链表。类似火车节,节点上有乘客(数据),节点连接节点
    • 不同于数组,链表的存储空间,不必是连续的空间
    • 链表的每个元素由一个存储元素本身的节点,和指向下一个元素的引用(有的语言称为指针,或者连接)组成
    • 相对数组的优势
    • 内存空间不必是连续的,可以充分利用计算机的内存,实现灵活的内存动态管理
    • 链表不必在创建的时候,就确定大小,并且可以无限的延伸下去
    • 链表在插入和删除数据时,时间复杂度可以达到O(1),相对数组效率高很多,
  • 相对数组的缺点

    • 链表访问任何一个位置的元素时,都要从头开始访问,(无法跳过第一个元素访问任何一个元素)
    • 无法通过下标直接访问元素,需要从头一个个访问,直到找到对应的元素
  • 选链表/数组

    • 频繁的插入,删除元素—-》链表
    • 通过下标访问元素—-》数组