实际项目中除了概念的抽象之外,实际对象数据量很多情况下,数据存储关系以及数据的获取也是一项重要的问题。问题的解决思路,对应的算法也是一项非常重要的工作,这种类型的工作往往和实际的应用场景有关系。第一项数据抽象以及数据之间的关联关系,其核心是设计模式,是概念定义,处理实际问题中,这个往往是最重要的环节。一个问题内容定位出问题了,后面的事情处理起来就比较麻烦。对于最后一项内容,比方说转发类型,转发的流程逻辑是其核心算法。图像处理、AI、数值计算等领域又是另外一套算法内容,当然这种算法可能是一个公式描述,也可能就是一套逻辑处理理论。数据结构与算法课程专注于数据元素个体之间的存储链接关系,以及特定数据结构上面元素算法。按照编程思维来讲,对象的封装和对象之间的关系解决的是内容描述的问题,对象的定义问题。对于C语言,void*指针完成不同类型的数据管理。对于高级语言,泛型编程技术路线是最佳选择。
1. 数据基本的数据结构列表
| C | C++ | Java | |
| 线性结构 | 1. 数组、单链表和双链表 2. Linux内核中双向链表的经典实现 | 数组、单链表和双链表 | 数组、单链表和双链表 |
| 栈 | 栈 | 栈 | |
| 队列 消息队列实现 | 队列 | 队列 | |
| 树形结构 | 二叉查找树 | 二叉查找树 | 二叉查找树 |
| AVL树 | AVL树 | AVL树 | |
| 伸展树 | 伸展树 | 伸展树 | |
| 1. 红黑树(一)之 原理和算法详细介绍 2. 红黑树(二)之 C语言的实现 3. 红黑树(三)之 Linux内核中红黑树的经典实现 4. 红黑树(六)之 参考资料 | 1. 红黑树(一)之 原理和算法详细介绍 2. 红黑树(四)之 C++的实现 3. 红黑树(六)之 参考资料 | 1. 红黑树(一)之 原理和算法详细介绍 2. 红黑树(五)之 Java的实现 3. 红黑树(六)之 参考资料 | |
| 哈夫曼树 | 哈夫曼树 | 哈夫曼树 | |
| ... | |||
| 堆 | 二叉堆 | 二叉堆 | 二叉堆 |
| 左倾堆 | 左倾堆 | 左倾堆 | |
| 斜堆 | 斜堆 | 斜堆 | |
| 二项堆 | 二项堆 | 二项堆 | |
| 斐波那契堆 | 斐波那契堆 | 斐波那契堆 | |
| ... | |||
| 图 | 图的理论基础 | 图的理论基础 | 图的理论基础 |
| 1. 邻接矩阵无向图 2. 邻接表无向图 3. 邻接矩阵有向图 4. 邻接表有向图 | 1. 邻接矩阵无向图 2. 邻接表无向图 3. 邻接矩阵有向图 4. 邻接表有向图 | 1. 邻接矩阵无向图 2. 邻接表无向图 3. 邻接矩阵有向图 4. 邻接表有向图 | |
| 深度优先搜索和广度优先搜索 | 深度优先搜索和广度优先搜索 | 深度优先搜索和广度优先搜索 | |
| 拓扑排序 | 拓扑排序 | 拓扑排序 | |
| Kruskal算法 | Kruskal算法 | Kruskal算法 | |
| Prim算法 | Prim算法 | Prim算法 | |
| Dijkstra算法 | |||
| ... | |||
| 排序算法 | 冒泡排序 | 冒泡排序 | 冒泡排序 |
| 快速排序 | 快速排序 | 快速排序 | |
| 直接插入排序 | 直接插入排序 | 直接插入排序 | |
| 希尔排序 | 希尔排序 | 希尔排序 | |
| 选择排序 | 选择排序 | 选择排序 | |
| 堆排序 | 堆排序 | 堆排序 | |
| 归并排序 | 归并排序 | 归并排序 | |
| 桶排序 | 桶排序 | 桶排序 | |
| 基数排序 | 基数排序 | 基数排序 |
2. 高级语言
高级语言是面向对象语言,OOP(Object-Oriented programming)企图将datas和methods联系在一起,对数据进行合理的封装。但是GP(Generic Programming)企图将datas和methods分开,这样数据存储和数据的基本算法操作就可以合理的分开,算法和结构的分离使得算法具有更好的通用性,减少不必要的代码,算法和数据描述是完全分离开来了。
C++STL库中sort算法对迭代器有要求,要求随机迭代器,list列表迭代器没有办法使用sort直接使用。但是list这种列表有自己的排序算法,当然必然首先用自己容器带的算法。
所有的算法,期内最终涉及元素本省的操作,无非就是比大小。
数据结构与算法代码下载地址
其中包含的最基本的单元测试。



