算法和数据结构学习

概览

理论

数据结构和算法

数据结构 进阶算法 算法设计思想
栈 队列 链表 冒泡算法 选择算法 分而治之
集合 字典 插入算法 归并算法 动态规划
树 堆 图 快速算法 顺序算法 贪心
二分搜索 回溯

数据结构

  • 有先后顺序:栈 队列 链表
  • 无序:集合 字典
  • 具有连接关系:树 堆 图

算法

  • 链表:遍历、删除节点
  • 树、图:深度/广度优先遍历
  • 数组:冒泡/选择/插入/归并/快速排序、顺序/二分搜索

刷题

实战

  • 前端与数据/结构算法的结合点
  • 在工作中与数据结构/算法打交道,阅读开源框架源码,用在日常工作中

  • 后进先出
  • js中没有栈,可以使用array实现栈的所有功能
1
2
3
4
5
6
const stack = []
stack.push(1)
stack.push(2)
// pop() 移除数组的最后一项并返回该项
const item1 = stack.pop()
const item2 = stack.pop()

什么场景下用栈

  1. 十进制转二进制
  • 后出来的余数排在前面
  • 把余数依次入栈,然后再出栈,就可以实现余数倒序输出
  1. 判断字符串的括号是否有效
  • 越靠左的左括号,对应的右括号越靠前
  • 左括号入栈,右括号出栈,最后栈空了就是合法的
  1. 函数调用堆栈
  • 最后被调用的函数,最先执行完
  • js解释器使用栈来控制函数的调用顺序

题目

  1. 题目20
  • 新建一个栈
  • 扫描字符串,遇到左括号入栈,遇到右括号,判断和栈顶括号是否匹配,匹配就出栈,不匹配就直接判定不合法
  • 最后栈空就合法,否则不合法