基于C和Java实现的数据结构和算法主要分为5类:
- 基本数据结构(动态数组、链表、栈及队列等)
- 字典类结构(二叉查找树、AVL树、红黑树、哈希表、Digital Search Tree、B-树等)
- 排序算法(快排、堆排序、归并排序)
- 字符串算法(Trie树、后缀树、后缀数组、AC自动机、KMP等匹配查找算法、正则表达式等)
- 图算法(DFS、BFS、最小生成树、最短路径)
基于C++实现的算法设计策略主要分为以下几种:
- 递归与分治策略
- 动态规划算法
- 贪心算法
- 回溯法
- 分支限界法
- 概率算法
- 线性规划与网络流算法
- 近似算法
参考资料:
- Algorithms,4th Edition
- Algorithm Design
- List of data structures
- The lesser known but useful data structures
- The Archive of Interesting Code
- NOCOW
它实现的数据结构,如图下(待扩充):
每个文件夹对应实现不同的功能,例如有基础结构、查找、排序、字符串、图论等。
对于每一个数据结构,它含有3个文件。以二叉查找树为例:
- bst.h :头文件定义其数据结构和API
- bst.c :实现二叉查找树的各种操作:
- bst_test.c :测试二叉查找树的操作和时间消耗(测试用例并不全面):
注意:在实现后务必使用Valgrind工具检查程序内存使用是否存在问题,命令如下:
valgrind --leak-check=yes program arg1 arg2 ...
Utils
它提供了必要的计时操作和常见的基础数据结构,以下均是基于泛型的C实现:
Sort
它提供了常见的插入排序(直接插入排序、折半插入排序、希尔排序)、交换排序(冒泡排序、快速排序)、选择排序(简单选择排序、堆排序)、二路归并排序等比较排序,还包括了一些非基于比较的排序算法如计数排序、基数排序、桶排序等。
Search
它主要是以不同的数据结构实现查询操作,例如以树结构为形式的查找树、以链表为形式的跳跃表、以数组或链表为形式的散列表等等。主要实现有:
String