数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象,以及它们之间的关系和操作等相关问题的学科。
数据结构的形式: 是相互之间存在一种或多种特定关系的数据元素的集合。
第1章 绪论
1.1 基本概念和术语
① 数据(data): 所有能被输入到计算机中,且被计算机处理的符号的集合 ,是计算机操作的对象的总称。
② 数据元素(data element): 是数据的基本单位,并不是孤立和无序的,也称结点、元素、顶点或记录。
③ 数据项(data item): 是数据的不可分割的最小单位,有时也称为域(field),即数据表中的字段。
④ 数据对象(data object): 具有相同性质的数据元素的集合,是数据的一个子集。
⑤ 数据结构(data structure): 是指互相之间存在着一种或多种关系的数据元素的集合。数据元素之间的关系称为结构。
ps:假设要处理的是“人类”这种数据?
- ① 数据当然就是这些抽象的人类。
- ② 那么人就是人类的子集即为数据元素。
- ③ 人按年龄再细分就可以是婴儿、小孩、成年人、中年人…那这些分类就是不同的数据对象。
- ④ 人这种数据元素,可以说是由眼睛、耳朵、鼻子…等数据项组成。
- ⑤ 人和人之间的内在联系即为数据结构。
1.2 逻辑结构与物理结构
逻辑结构:是指数据对象中数据元素之间的相互关系。
物理/存储结构:是指数据的逻辑结构在计算机中的存储形式。
逻辑结构
| 分类 | 相互关系 |
|---|---|
| 集合结构 | 无关系 |
| 线性结构 | 一对一 |
| 树形结构 | 一对多 |
| 图形结构 | 多对多 |
物理结构
| 顺序存储结构 | 链式存储结构 | |
|---|---|---|
| 概念 | 把数据元素存到地址连续的存储单元里 | 数据元素可以存放在任意的连续/不连续存储单元里 |
| 优点 | 可以实现随机存取 | 充分利用所有存储单元,不会出现碎片现象 |
| 缺点 | 使用整块存储单元,会产出较多碎片 | 需要额外的存储空间用来存放下一结点的指针,只能实现顺序存取。 |
1.3 抽象数据类型的表示与实现
抽象数据类型(Abstract Data Type):指一个数学模型以及定义在该模型上的一组操作。
抽象数据类型可用(D,S,P)三元组表示。
- D是数据对象;
- S是D上的关系集
- P是对D的基本操作集。
ADT 抽象数据类型名{
数据对象:〈数据对象的定义〉
数据关系:〈数据关系的定义〉
基本操作:〈基本操作的定义〉
} ADT 抽象数据类型名
1.4 算法特性和设计要求
算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列并且每条指令表示一个或多个操作
算法五个重要特性:
- 有穷性:一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。
- 确定性:算法中每条指令必须有确切的含义,不会出现二义性。
- 可行性:算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成。
- 有输入:有零个或多个输入,取自特定的对象集合
- 有输出:至少有一个或多个输出,是算法进行信息加工后得到的结果。
好算法的特质:
- 正确性:正确反映问题的需求,能够得到问题的正确苔案。
- 可读性:算法设计的另一目的是为了便于阅读、理解和交流。
- 健壮性:输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
- 时间效率高和存储容量低。
算法效率的衡量方法和准则有两种衡量算法效率的方法:
- 事后统计法:利用计算机内记时功能,用一组或多组相同的统计数据区分。
- 事前分析估计法:求出算法的一个时间界限函数。
1.5 时间复杂度和空间复杂度
时间复杂度:程序运行从开始到结束所需要的时间。(T (n) = O(f(n)) )
空间复杂度:算法所需存储空间的度量,输入数据所占空间;程序本身所占空间;辅助变量所占空间(S(n)=O(f(n)) )
推导大O阶:(时间复杂度是要忽略高阶项系数,和低阶项)
- ① 用常数1取代运行时间中的所有加法常数。
- ② 在修改后的运行次数函数中,只保留最高阶项。
- ③ 如果最高阶项存在且不是1,则去除与这个项相乘的常数。
常用的时间复杂度所耗费的时间从小到大依次是
O(1) < 0(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)