链表及二叉树

数据结构是计算机存储、组织数据的方式,为了高效获取和修改数据

线性结构: 顺序表(数组)和链表 …

  1. 为什么要发明链表? => 弥补数组的不足

  2. 数组的优缺点?优点查询方便,缺点增删改复杂

  3. 链表是如何进行增删改操作的?链表的操作,修改指针域的指向(改变锁链连接的对象)

    数组相关代码:V8 引擎 array.js 源码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    const start_i = 2
    const del_count = 1
    const arr = [10, 24, 17, 18, 13, 14, 15, 12, 16, 15, 19, 11]

    console.log('原始的数组:', arr);
    SimpleMove(arr, start_i, del_count); // 298 line 部分代码
    console.log('删除后结果:', arr)

    function SimpleMove(array, start_i, del_count) {
    const len = arr.length

    // 循环数组[17, ..., 11]的部分
    for (var i = start_i; i < len - del_count; i++) {
    var from_index = i + del_count;

    // 从 3号下标数值开始 依次往前移动
    array[i] = array[from_index];
    }

    // delete 操作符 删除多余的部分
    for (var i = len; i > len - del_count; i--) {
    delete array[i - 1];
    }

    // 最后修改数组的 length
    arr.length = len - del_count
    }
  4. 可以直接 修改数组的 length 从而达到 ArrayPop() 方法的效果吗? 395 line

  5. array[array.length] = val; 和使用 ArrayPush() 差别? 415 line

树结构: 二叉树