根据不同编程语言来学习数据结构和算法,包括 C
Java
Python
JavaScript
Go
TypeScript
等,提供充分注释说明。
- 涵盖了数值计算、字符查找、树遍历、排序、动态规划等不同算法。
- 每个算法都有多种语言的实现,通过算法与数据结构理解不同语言的特色。
- 例子逐一,适合学生或程序员学习和分析,提升编程水平。
- 文本查找:包括线性搜索、二分搜索、树形搜索、最大公共子序列、回文计算等,主要针对字符串查找。
- 数学计算:包括进制转换、开平方、斐波那契数列、质因数分解、数字三角形等,主要进行数值计算。
- 排序算法:包括冒泡、选择、插入、希尔、归并、快速、堆、计数、桶、基数等,用于按顺序排列数据。
- 其他算法:包括动态规划、贪心算法、分治算法、回溯算法、图算法(如广度优先搜索、深度优先搜索、Dijkstra算法、Kruskal算法等),此外还包括机器学习和人工智能算法,如分类算法、聚类算法、深度学习、强化学习等。
![算法概览](https://camo.githubusercontent.com/df46f3516f82169d227d560a5b6346e8b367d7c52476bc6f07cc64384dabd754/68747470733a2f2f706963342e7a68696d672e636f6d2f38302f76322d34336664653064343164663866626133373733333361333138663432383331375f31343430772e77656270)
- 贪心算法:一种通过每次选择局部最优解来期望得到全局最优解的方法。
- 分治算法:将问题分解为较小的子问题,独立解决后再合并结果。
- 动态规划:通过将复杂问题分解为更简单的重叠子问题来求解。
- 回溯算法:通过逐步构建候选解并放弃那些无法满足条件的方案来解决问题。
- 图算法:包括广度优先搜索、深度优先搜索、Dijkstra算法、Kruskal算法等,用于解决图相关问题。
- 分支限界法:一种组合优化问题的求解方法,通过系统地探索搜索树的分支来解决问题。
详细信息见:10大算法思想
算法 |
C语言版 |
JS版 |
Python版 |
Java版 |
TS版 |
时间复杂度(平均/最坏) |
空间复杂度 |
适用场景 |
二叉树遍历 |
C |
JS |
Python |
Java |
TS |
O(n) / O(n) |
O(n) |
适用于树结构数据的遍历,如 XML 解析、文件系统遍历 |
算法 |
代码链接 |
时间复杂度 |
空间复杂度 |
适用场景 |
简单递归 |
C |
O(2^n) |
O(n) |
适用于分治算法、树和图的遍历、回溯问题 |
算法 |
代码链接 |
时间复杂度 |
空间复杂度 |
适用场景 |
数学计算 |
C |
O(n) |
O(1) |
适用于数论、加法、乘法、大整数计算等 |
算法 |
代码链接 |
时间复杂度 |
空间复杂度 |
适用场景 |
日期与日历 |
C |
O(1) |
O(1) |
适用于日期计算、节假日推算、日期转换等 |
数据结构是数据的组织和存储的方式,也就是把数据聚合在一起,以便进行加工整理。不同的数据结构,对其访问、插入、删除等操作的效率不同。通过选择合适的数据结构,可以高效地处理数据。详见:数据结构概述
数据结构 |
描述 |
结构特点 |
访问效率 |
插入/删除效率 |
Array (数组) |
具有相同数据类型的元素集合,支持按索引随机访问 |
连续内存存储,支持线性或非线性 |
O(1) |
O(n) |
Linked List (链表) |
数据以链式结构存储,通过指针连接,分为单向链表、双向链表和循环链表 |
线性结构,内存不连续 |
O(n) |
O(1) (头部) / O(n) (中间) |
Tree (树) |
树状数据集合,节点按层级关系组织,常见类型包括二叉树、二叉搜索树、平衡树等 |
非线性结构,一个根节点,子节点数量不限 |
O(log n) |
O(log n) |
Heap (堆) |
一种特殊的完全二叉树,满足堆序性(最大堆或最小堆),常用于优先队列 |
非线性结构,支持按最值高效操作 |
O(1) (取堆顶) |
O(log n) |
Stack (栈) |
后进先出 (LIFO) 的数据集合 |
线性结构,顺序或链式存储,仅允许在栈顶操作 |
O(1) |
O(1) |
Queue (队列) |
先进先出 (FIFO) 的数据集合 |
线性结构,顺序或链式存储,支持在队尾插入、队头删除 |
O(1) |
O(1) |
Graph (图) |
由节点(顶点)和边组成的图形数据结构,常见存储方式为邻接表或邻接矩阵 |
非线性结构,节点间可多对多连接 |
O(1) (邻接矩阵) / O(n) (邻接表) |
O(1) (邻接矩阵) / O(n) (邻接表) |
Hash (散列) |
通过哈希函数将键映射到存储位置的数据结构,支持快速查找、插入和删除 |
线性结构,通过哈希键值映射 |
O(1) (均摊) |
O(1) (均摊) |
Struct (结构体) |
组合多种类型的数据,形成一个整体,常用于表示复杂对象 |
自定义结构,字段固定,包含多种数据类型 |
O(1) |
O(1) |
List (列表) |
有序集合,允许重复元素,支持索引访问 |
线性结构,元素按插入顺序存储 |
O(1) (末尾插入),O(n) (中间插入/删除) |
O(1) (索引访问),O(n) (查找) |
Set (集合) |
无序集合,不允许重复元素,支持高效查找 |
线性结构,基于哈希或树实现 |
O(1) (哈希实现),O(log n) (树实现) |
O(1) (哈希实现),O(log n) (树实现) |
Map (映射) |
存储键值对的数据结构,支持快速查找、插入和删除 |
关联数组,基于哈希或平衡树实现 |
O(1) (哈希实现),O(log n) (树实现) |
O(1) (哈希实现),O(log n) (树实现) |
仓库:
https://github.com/microwind/algorithms
站点:
https://microwind.github.io/algorithms
如果您对本项目感兴趣请加我,欢迎一起共建!
If you are interested in this project, please add me. I welcome you to build it together!
wechat: springbuild
邮件: [email protected]
or [email protected]