回炉重造之数据结构【一】绪论
数据结构的基本概念
基本概念和术语
1、数据:数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。
2、数据元素:数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。
3、数据对象:数据对象是具有相同性质的数据元素的集合,是数据的一个子集
同一个数据对象里的数据元素,可以组成不同的数据结构
4、数据类型:数据类型是一个值的集合和定义在此集合上的一组操作的总称
(1)原子类型:其值不可再分的数据类型
(2)结构类型:其值可以再分解为若干成分(分量)的数据类型
(3)抽象数据类型(ADT):抽象数据组织及与之相关的操作
抽象数据类型=(数据对象,数据关系,基本操作)
定义一个ADT,就是“定义”一种数据结构
ADT用数学化的语言定义数据的逻辑结构、定义运算。与具体的实现无关。
ADT分类:原子类型、固定聚合类型、可变聚合类型
5、数据结构:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
(1)数据结构=逻辑结构+存储结构+数据的运算
(2)一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构。
不同的数据元素,可组成相同的数据结构
数据结构的三要素
1、数据的逻辑结构:
(1)定义:逻辑结构指数据元素之间的逻辑关系,即从逻辑关系上描述数据。与数据的存储无关,独立于计算机。
(2)分类:
注:线性结构:一对一;树形结构:一对多;图状结构或网状结构:多对多。
2、数据的存储结构
(1)定义:存储结构是指数据结构在计算机中的表示(又称映像),也称物理结构。
(2)分类:
a)顺序存储:物理上必须连续;会有碎片产生
b)非顺序存储:各个数据元素在物理上可以是离散的
3、数据存储结构的影响
(1)影响存储空间分配的方便程度;
(2)影响对数据运算的速度;
4、数据的运算:针对某种逻辑结构,结合实际需求,定义基本运算
算法和算法评价
算法的基本概念
1、算法:算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。
2、算法的特性:有穷性、确定性、可行性、输入、输出。
3、一个“好”的算法应考虑的目标:正确性、可读性、健壮性、效率与低存储量需求
算法效率的度量
1、时间复杂度:一个语句在算法中被重复执行的次数, T ( n ) = O ( f ( n ) ) T(n)=O(f(n)) T(n)=O(f(n))。
2、空间复杂度:算法所耗费的存储空间(如递归调用的深度), S ( n ) = O ( g ( n ) ) S(n)=O(g(n)) S(n)=O(g(n))。
3、加法规则: T ( n ) = T 1 ( n ) + T 2 ( n ) = O ( f ( n ) ) + O ( g ( n ) ) = O ( m a x ( f ( n ) , g ( n ) ) ) T(n)=T_1(n)+T_2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n))) T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))
4、乘法规则: T ( n ) = T 1 ( n ) × T 2 ( n ) = O ( f ( n ) ) × O ( g ( n ) ) = O ( f ( n ) × g ( n ) ) T(n)=T_1(n)\times T_2(n)=O(f(n))\times O(g(n))=O(f(n)\times g(n)) T(n)=T1(n)×T2(n)=O(f(n))×O(g(n))=O(f(n)×g(n))
5、常见的渐近时间复杂度:常对幂指阶
O
(
1
)
<
O
(
l
o
g
2
n
)
<
O
(
n
)
<
O
(
n
l
o
g
2
n
)
<
O
(
n
2
)
<
O
(
n
3
)
<
O
(
2
n
)
<
O
(
n
!
)
<
O
(
n
n
)
O(1)<O(log_2n)<O(n)<O(nlog_2n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)