概览
理论
数据结构和算法
数据结构 | 进阶算法 | 算法设计思想 |
---|---|---|
栈 队列 链表 | 冒泡算法 选择算法 | 分而治之 |
集合 字典 | 插入算法 归并算法 | 动态规划 |
树 堆 图 | 快速算法 顺序算法 | 贪心 |
二分搜索 | 回溯 |
数据结构
- 有先后顺序:栈 队列 链表
- 无序:集合 字典
- 具有连接关系:树 堆 图
算法
- 链表:遍历、删除节点
- 树、图:深度/广度优先遍历
- 数组:冒泡/选择/插入/归并/快速排序、顺序/二分搜索
刷题
- 刷题网站:LeetCode中文网题库
- 刷题顺序:按照类型刷题,相当于集中训练
实战
- 前端与数据/结构算法的结合点
- 在工作中与数据结构/算法打交道,阅读开源框架源码,用在日常工作中
栈
- 后进先出
- js中没有栈,可以使用array实现栈的所有功能
1 | const stack = [] |
什么场景下用栈
- 十进制转二进制
- 后出来的余数排在前面
- 把余数依次入栈,然后再出栈,就可以实现余数倒序输出
- 判断字符串的括号是否有效
- 越靠左的左括号,对应的右括号越靠前
- 左括号入栈,右括号出栈,最后栈空了就是合法的
- 函数调用堆栈
- 最后被调用的函数,最先执行完
- js解释器使用栈来控制函数的调用顺序
题目
- 题目20
- 新建一个栈
- 扫描字符串,遇到左括号入栈,遇到右括号,判断和栈顶括号是否匹配,匹配就出栈,不匹配就直接判定不合法
- 最后栈空就合法,否则不合法