前端系统课程 - 15. 数据结构入门

哈希表(Hash Table)

  • 计数排序中的“桶”,

队列(Queue)

  • 可以理解为数据先进先出的方式。

  • 数组中的 Array.push() 方法将数据推入至数组末尾(先进),Array.shift() 方法将数组的第一个数据取出(先出),这就属于队列操作。

  • 现实生活中的排队。

栈(Stack)

  • 可以理解为数据先进后出的方式。

  • 数组中的 Array.push() 方法将数据推入至数组末尾(先进),Array.pop() 方法将数组的末一个数据弹出(后出),这就属于栈操作。

  • 现实生活中拆墙。

链表(linked List)

  • 数组由于其连续性而使得无法直接删除中间的某项,而链表可以。

  • 链表可以用哈希实现,例如 JS 中的多层嵌套的对象数据。

  • 链表中 head 和 node 的概念:head 指的就是链表中的第一个数据,其余的就是 node(包括 head 中包含的数据)。

树(Tree)

  • 层级结构、DOM结构等都属于树形结构。

  • 概念包含:层数(数据分层所在的不同位置)、深度(树形结构有多少层)、节点个数(数据节点的数量)。

  • 二叉树:每层数据分支最多不超过两个的树形结构,两个分叉分别用“左子树”和“右子树”表示。

    • 满二叉树:每一层数据都是两个的二叉树。

    • 完全二叉树;除最后一层外,其余层都是满的,并且最后一层或是满的,或是只在右边缺少连续若干节点的二叉树。

    • 以上两种二叉树都能用数组实现。

  • 其他树可以用哈希(对象)实现。

  • 其他树例如:B 树,红黑树、AVL 树等。

堆(Heap)

  • 堆(二叉堆)可以视为一颗完全二叉树。

  • 二叉堆分为最大堆和最小堆。

  • 利用二叉树特性可以实现堆排序。

  • 堆排序的速度与快排相同。

  • 堆排序可视化