绪论
绪论
1.1 基本概念
**数据:**数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。
**数据元素:**数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。
一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。
**数据对象:**数据对象是具有相同性质的数据元素的集合,是数据的一个子集。
数据类型
数据类型是一个值的集合和定义在此集合上的一组操作的总称。
1)原子类型。其值不可再分的数据类型。
2)结构类型。其值可以再分解为若干成分(分量)的数据类型。
3)抽象数据类型。抽象数据组织及与之相关的操作。
Ps: 抽象数据类型(ADT)描述了数据的逻辑结构和抽象运算,通常用(数据对象、数据关系、基本操作集)这样的三元组表示,从而构成一个完整的数据结构定义。
数据结构
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 数据结构包括三方面的内容:逻辑结构、存储结构和数据的运算。
1.2 数据结构三要素
一、数据的逻辑结构
逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上描述数据。它与数据的存储无关,是独立于计算机的。 数据的逻辑结构分为线性结构和非线性结构。
**集合:**结构中的数据元素之间除“同属一个集合”外,别无其他关系。
**线性结构:**结构中的数据元素之间只存在一对一的关系。
**树形结构:**结构中的数据元素之间存在一对多的关系。
**图状结构或网状结构:**结构中的数据元素之间存在多对多的关系。
二、数据的存储结构
存储结构是指数据结构在计算机中的表示(又称映像),也称物理结构。它包括数据元素的表示和关系的表示。数据的存储结构是用计算机语言实现的逻辑结构,它依赖于计算机语言。
**1)顺序存储。**把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。
优点:可以实现随机存取,每个元素占用最少的存储空间;缺点:只能使用相邻的一整块存储单元,因此可能产生较多的外部碎片。
**2)链式存储。**不要求逻辑上相邻的元素在物理位置上也相邻,借助指示元素存储地址的指针来表示元素之间的逻辑关系。
优点:不会出现碎片现象,能充分利用所有存储单元;缺点:每个元素因存储指针而占用额外的存储空间,且只能实现顺序存取。
**3)索引存储。**在存储元素信息的同时,还建立附加的索引表。索引表中的每项称为索引项,索引项的一般形式是(关键字,地址)。
优点:检索速度快;缺点:附加的索引表额外占用存储空间,另外增加和删除数据时也要修改索引表,因而会花费较多的时间。
**4)散列存储。**根据元素的关键字直接计算出该元素的存储地址,又称哈希存储。
优点:检索、增加和删除结点的操作都很快;缺点:若散列函数不好,则可能出现元素存储单元的冲突,而解决冲突会增加时间和空间开销。
三、数据的运算
施加在数据上的运算包括运算的定义和实现。运算的定义是针对逻辑结构的,指出运算的功能;运算的实现是针对存储结构的,指出运算的具体操作步骤。
1.3 算法和算法评价
算法(Algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。此外,一个算法还具有下列5个重要特性:
1)有穷性:有限步之后结束。
2)确定性:不存在二义性,即没有歧义。
3)可行性:比如受限于计算机的计算能力,有些算法虽然理论上可行,但实际上无法完成。
4)输入:能被计算机处理的各种类型数据,如数字,音频,图像等等。
5)输出:一至多个程序输出结果。
通常,设计一个“好”的算法应考虑达到以下目标:
1)正确性; 2)可读性; 3)健壮性; 4)高效率与低存储量需求。
1.4 算法效率的度量
算法效率的度量是通过时间复杂度和空间复杂度来描述的。
时间复杂度相关规则: (常对幂指阶)
时间复杂度总是考虑最坏情况下的情况,相同规模下,时间上复杂度小的算法时间必然优于时间复杂度较大的算法。
空间复杂度中:算法原地工作是指算法所需的辅助空间为常量,即O(1)。
