原理 · 代码 · 动画
数据结构与算法可视化
通过 44 个交互课程学习排序、查找、图算法、动态规划和数据结构。阅读原理、执行步骤和 JavaScript 代码,配合动画观察执行过程,并完成相关练习。
排序算法9 个课程
查找算法2 个课程
图算法7 个课程
广度优先遍历
使用队列逐层访问图节点,并在入队时标记已发现节点。
深度优先遍历
沿一条分支深入,在访问完邻接节点后回溯。
Dijkstra 最短路径
确定当前距离最小的节点,再松弛它的出边。
拓扑排序
将入度为零的节点依次移出,形成依赖执行顺序。
Kruskal 最小生成树
按权重尝试连接两个分量,使用并查集排除形成环的边。
A* 寻路
按已走步数与到终点的估计步数之和,选择下一格进行扩展。
Floyd 最短路径
逐个允许顶点作为中间节点,更新任意两点之间的最短距离。
数组算法5 个课程
字符串算法1 个课程
KMP 字符串匹配
利用最长相等前后缀表,在失配时复用已匹配的字符。
动态规划4 个课程
贪心与回溯4 个课程
数据结构12 个课程
数组
按连续下标读取数据,插入和删除时移动后续元素。
单链表
节点保存数据和 next 指针,通过链接组织顺序。
栈
在栈顶压入和弹出元素,遵循后进先出。
循环队列
使用 head、size 和环形槽位实现先进先出。
哈希表
根据哈希值定位桶,使用链式结构处理冲突。
二叉搜索树
左子树值小于节点,右子树值大于节点。
最小堆
完全二叉树的父节点不大于孩子,堆顶保存最小值。
双端队列
使用双向链接,在队首和队尾分别插入或移除节点。
并查集
通过代表节点管理集合,使用按大小合并和路径压缩。
字典树
复用字符串的公共前缀,用词尾标记区分完整单词。
树状数组
利用 lowbit 管理累计区间,实现单点增量与前缀查询。
图
使用邻接表保存节点关系,逐条加入无向边。