JS数据结构-链表

首先链表是一种数据结构,JavaScript中并没有链表,但是可以用Object模拟链表,所以在JavaScript中,链表表示的是用Object模拟的一种链表数据结构。

一. 什么是链表

  • 多个元素组成的链表
  • 元素存储不连续,用next指针联系
  • 链表和数组的区别
    • 数组:增删非首尾元素时往往需要移动元素
    • 链表:增删非首尾元素不需要移动元素,只需要更改next的指向即可
  • 简单的链表模型
const a = {val: 'a'}
const b = {val: 'b'}
const c = {val: 'c'}
const d = {val: 'd'}
a.next = b
b.next = c
c.next = d

二. 对链表的操作

  • 通过一个指针来遍历
let p  = a
while(p) {
  console.log(p.val);
  p = p.next
}
  • 通过改变next的执行来达到删除链表
    • 如删除上述链表模型中的c
    • 改变节点b的next指向b.next = d,即可达到删除节点c的目的

三. 前端与链表

  • 链表与原型链
    • 原型链上有两个属性分别是__proto__,prototype,
    • __proto__相当于链表上的next,当前对象通过__proto__指向原型对象,
    • 原型链通过__proto__属性连接各种原型对象
      • obj -> Object.prototype -> null
      • func -> Function.prototype -> Object.prototype -> null
      • arr -> Array.prototype -> Object.prototype -> null
    • 通过一个原型链instanceof方法来理解
    const instanceof1 = (A, B) => {
    let p = A
    while(p) {
      if(p === B.prototype) {
        return true
      }
      p = p.__proto__
    }
    return false
    }
    // console.log(instanceof1([], Array)) true
    

你可能感兴趣的:(JS数据结构-链表)