跳到主要内容

认识

数组与链表的对比:

  • 数组的缺点:

    • 数组的创建通常需要申请一段连续的内存空间(一整块内存),在很多编程语言中,数组的长度都是固定的,如果数组已被数据填满,再要加入新的元素是非常困难的。而且,对于数组的删除和添加操作,通常需要将数组中的其他元素向前或者向后平移,这些操作也是十分繁琐的。
    • JS中数组却不存在上述问题,主要是因为他们被实现了成了对象,但是与其他语言相比(比如C或Java),那么它的效率会低很多
  • 链表的优势:

    • 链表中的元素在内存中不必是连续的空间,可以充分利用计算机的内存,实现灵活的内存动态管理。
    • 链表不必在创建时就确定大小,并且大小可以无限地延伸下去。
    • 链表在插入和删除数据时,时间复杂度可以达到O(1),相对数组效率高很多。
  • 链表的不足:

    • 链表访问任何一个位置的元素时,都需要从头开始访问(无法跳过第一个元素访问任何一个元素)。
    • 无法通过下标值直接访问元素,需要从头开始一个个访问,直到找到对应的元素。
    • 虽然可以轻松地到达下一个节点,但是回到前一个节点是很难的。

链表特性:

  • 链表是以节点(Node)的方式来存储,所以又叫链式存储。
  • 节点可以连续存储,也可以不连续存储。
  • 节点的逻辑顺序与物理顺序可以不一致
  • 表可以扩充(不像数组那样还得重新分配内存空间)

链表特点:

  • data:存放的数据
  • next: 指向像一个链接对象的引用
  • head:头节点,指向链表的第一个节点;
  • 尾节点:链表中的最后一个节点指向null;
  • 空链表:当链表中一个节点也没有的时候,head直接指向null;