
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
前9篇我们学了顺序表、单链表、双向链表等线性结构。这一篇来做个实战项目:学生信息管理系统。我们会用单链表来存储学生信息,实现增删改查功能,并采用模块化设计,把代码拆分成.h和.c文件。这是一个完整的命令行小项目,你可以把它当作数据结构学习的第一个综合练习。
最短路径问题是图论中的核心问题之一。这一篇我们学习两种最经典的算法:Dijkstra算法解决单源最短路径(从一个顶点到其他所有顶点),Floyd算法解决多源最短路径(任意两点之间)。Dijkstra基于贪心思想,不能处理负权边;Floyd基于动态规划,代码简洁但时间复杂度较高。我们会用C语言实现两种算法,并分析它们的适用场景。
查找是在数据集合中寻找满足特定条件的数据元素。静态查找指查找过程中数据集合不变。这一篇我们学习两种最基本的静态查找算法:顺序查找和折半查找。顺序查找简单但效率低,折半查找效率高但要求数据有序。我们会实现哨兵优化的顺序查找,以及折半查找的递归和非递归版本,并介绍折半查找的判定树。
Trie树是一种专门处理字符串的高效数据结构,它将字符串的公共前缀合并存储,能在O(L)时间内完成插入和查找(L为字符串长度),远快于哈希表。这一篇我们实现Trie树的节点结构,手写插入、搜索、前缀匹配等操作,并用它解决自动补全和单词统计问题。
贪心算法是求解优化问题的一种策略,它在每一步都做出当前看起来最优的选择,希望通过局部最优达到全局最优。贪心算法通常简单高效,但并不是所有问题都适用——需要问题具有贪心选择性质。这一篇我们通过活动选择问题和找零问题来理解贪心的核心思想,并分析贪心算法与动态规划的区别
最小生成树(MST)是在带权无向连通图中找一棵包含所有顶点的树,且边权之和最小。这一篇我们学习两种经典算法:Prim算法从顶点出发,适合稠密图;Kruskal算法从边出发,结合并查集,适合稀疏图。我们会用C语言实现两种算法,并对比它们的适用场景。
图的遍历是图算法的基础。深度优先搜索(DFS)像走迷宫,一条路走到黑再回头;广度优先搜索(BFS)像水面涟漪,一层一层向外扩散。这一篇我们分别用递归实现DFS、用队列实现BFS,并对比两种遍历产生的序列差异,理解它们的适用场景。
哈希表是一种通过哈希函数直接映射数据位置的数据结构,理想情况下查找、插入、删除的时间复杂度都是O(1)。这一篇我们学习哈希函数的设计(除留余数法),以及两种冲突解决方法:链地址法(拉链法)和开放地址法(线性探测、二次探测)。最后手写一个完整的哈希表实现。
在普通的二叉链表中,n个节点共有2n个指针域,其中只有n-1个指向实际节点(根节点除外),其余n+1个都是空指针,造成空间浪费。线索二叉树就是利用这些空指针,指向节点的前驱或后继,从而可以在线性时间内完成遍历,而不需要递归或栈。这一篇我们实现中序线索化及其中序遍历。
在科学计算和工程应用中,经常遇到特殊矩阵——大量元素重复或为零。如果直接用二维数组存储,会浪费大量空间。这一篇我们学习如何压缩存储这些特殊矩阵:对称矩阵只存一半,三角矩阵只存三角部分,稀疏矩阵只存非零元素。重点讲解稀疏矩阵的三元组表示法和快速转置算法。







