《数据结构》课程绪论
使用教材:
《数据结构教程》第5版 李春葆 清华大学出版社
参考书:
《数据结构与算法分析 C语言描述》(第2版) Mark Allen Weiss 机械工业出版社
《算法导论》(第3版) Charles E. Leiserson 等 机械工业出版社
《算法》(第4版) Robert Sedgewick Kevin Wayne 人民邮电出版社
《STL源码剖析》 侯捷 华中科技大学出版社
使用语言:C/C++
1.数据结构基本概念
数据与数据结构
- 数据(data):描述客观事物的数和字符的集合。
- 数据元素(data element):数据的基本单位
- 数据项(data item):具有独立含义的数据最小单位,又叫字段或域。
- 数据结构(data structure):所有数据元素及其构成的关系
数据结构包括的三个方面
- 逻辑结构(logical structure)(数据的逻辑关系)
- 存储结构(storage structure)(物理结构,如何在存储器上表示)
- 运算(operation)(对数据实施的操作,增删改查排序等)
逻辑结构的表示方法
- 图表
- 二元组 B=(D,R) ,其中 D 为数据集合,
R 为数据的所有关系的集合。 - 每一个关系是序偶的集合,对于序偶 <x,y> <script type="math/tex" id="MathJax-Element-8"> </script>( x,y∈D ), x 是
y 的前驱(predecessor), y 是x 的后继(successor)。使用尖括号表示 x 与y 是一个偏序关系,圆括号表示为等价关系。
逻辑结构的类型
- 集合
- 线性结构
- 树形结构
- 图型结构
存储结构
处理存储结构,既要保证存储所有的元素 ∀x∈D ,也要存储数据之间的逻辑关系 ∀r∈R 。
1. 顺序存储结构:所有元素在存储器中都是连续存放的,逻辑相邻的元素也必然物理相邻。支持快速的查找,插入和删除较慢;
2. 链式存储结构:每个逻辑元素使用内存中的结点存储。所有结点的地址不一定是连续的。C/C++使用指针来链接每一个结点。Java等语言使用引用。支持快速的插入和删除,但是不能随机存取,需要额外浪费指针空间。
3. 索引存储结构:利用关键字,地址
的方式建立索引,可以利用关键字的有序性快速查找到关键字地址。查找效率高,但是索引表需要额外空间开销。
4. 哈希(散列)存储结构:直接建立值->存储地址
的映射,支持快速查找和插入,不存储数据之间的逻辑关系。
2.算法及其分析
算法的特点
- 有穷性
- 确定性
- 可行性
- 有输入输出
算法设计的目标
- 正确性
- 可使用性
- 可读性
- 健壮性
- 高效率、低存储
算法的时间分析
T(n) 表示元操作出现的频度(注意是实际执行的次数,例如求一个数 n 的所有因子,只需要判断
通常用“大O记号”表示其渐进复杂度。渐进复杂度取其最高阶,忽略系数和低阶项。
最好、最坏、平均时间复杂度
设输入规模 n ,所有输入实例的集合为
平均时间复杂度的定义