数据结构特点
| 数据结构 | 特征 | 备注 |
|---|---|---|
| 栈 | 后进先出 | JS可以用Array模拟;对应操作术语出栈,入栈 |
| 队列 | 先进先出 | JS可以用Array模拟;对应操作术语出队,入队 |
| 链表 | 链表是多个元素组成的列表,元素存储不连续,用next指针连在一起 | JS可以用Object模拟链表; 链表与数组的区别:链表增删元素不需要移动元素位置,而数组除了尾部元素,其他位置进行增删都需要移动元素 |
| 树 | 树是一种分层的数据模型。前端常见的树包括:DOM、树、级联选择、树形控件…… | JS可以通过Object和Array构建树; 树的常用操作:深度/广度优先遍历、先中后序遍历 |
| 堆 | 堆是一种特殊的完全二叉树。所有的节点都大于等于(最大堆)或小于等于(最小堆)它的子节点 | 由于堆的特殊结构,我们可以用数组表示堆 |
| 集合 | 集合是一个无序且唯一的数据结构 | ES6中有集合:Set,也可用Array模拟,集合常用操作:去重、判断某元素是否在集合中、求交集 |
| 字典 | 字典也是一种存储唯一值的数据结构,但它以键值对的形式存储 | ES6中的字典名为Map,也可用Object模拟 |
| 图 | 图是网络结构的抽象模型,是一组由边连接的节点 | JS可以用Object和Array构建图。图的表示法:邻接矩阵、邻接表、关联矩阵。图可以表示任何二元关系,比如道路、航班 |
总结:数据结构是算法实现的基础,其承载各种算法的思想的底层数据结构是可以用Array或Object去模拟,需要了解Array和Object的基本操作方式,相比大家也都经常使用到这两种数据格式,Set和Map为ES6新增,可能相对使用较少,可以自行查阅文档了解基本使用方式。
时间&空间复杂度
- 时间和空间复杂度都可以用大O来表示
- 复杂度可以理解为所需要的执行的步数,一般我们都会取复杂度最坏的情况作为最终的复杂度
- 常见复杂度大小比较:O(n^2) > O(n log n) > O(n) > O(log n) > O(1)
常见时间复杂度
- O(n^2):2层循环(嵌套循环)
- O(nlogn):快速排序(循环 + 二分)
- O(n):1层循环
- O(logn):二分
结语:首先对数据结构有哪些有一定了解,不难看出,你需要对Array合Object的操作和特性有一定使用基础,算法最核心的看待问题的思想,而思想的锻炼也就是看到题目第一反映该用那种算法,用哪种数据结构去完成算法,这个需要大量的刻意练习,笔者也会根据大量的题目尽量把核心思想说明白了,让大家不再畏惧算法。