第一章 绪论
一 数据结构基本概念
1 数据
数据是信息的载体,是描述客观事物属性的数、字符以及所有能够输入到计算机中并被计算机程序识别和处理的符合的集合
2 数据元素
数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干个数据项组成,数据项是构造数据元素的不可分割的最小单位。
3 数据类型
数据类型是一个值的集合和定义在此集合上一组操作的总称。
-
原子类型:其值不可再分的数据类型
-
结构类型:其值可以再分解为若干成分(分量)的数据类型
-
抽象数据类型:抽象数据组织与之相关的操作
抽象数据类型
抽象数据类型(ADT)是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。通常用(数据对象、数据关系、基本操作集)这样的三元组来表示抽象数据类型
4 数据结构
在任何问题中,数据元素都不是孤立存在的,而是在它们之间存在着某种关系,这种数据元素相互之间的关系称为结构(Structure)。数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据结构包括三方面的内容:逻辑结构、存储结构和数据的运算。数据的逻辑结构和存储结构是密不可分的两个方面,一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构。
(一) 逻辑结构
1 概念
逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上描述数据。它与数据的存储无关,是独立于计算机的。
2 分类
数据的逻辑结构分为线性结构和非线性结构
集合:结构中的数据元素之间除“同属于一个集合”的关系外,别无其他关系
线性结构:结构中的数据元素之间只存在一对一的关系
树形结构:结构中的数据元素之间存在一对多的关系
图状结构或网状结构:结构中的数据元素之间存在多对多的关系
(二) 物理结构
1 概念
存储结构是指数据结构在计算机中的表示(又称映像),也称物理结构。包括数据元素的表示和关系的表示。数据的存储结构是逻辑结构用于计算机语言的实现,它依赖于计算机语言
数据的存储结构主要有:顺序存储、链式存储、索引存储和散列存储
2 存储结构
顺序存储:存储的物理位置相邻。
链式存储:存储的物理位置未必相邻,通过记录相邻元素的物理位置来找到相邻元素
索引存储:类似于目录,以后可以联系操作系统的文件系统章节来理解
散列存储:通过关键字之间计算出元素的物理地址
(三) 数据的运算
数据的运算包含运算的定义和实现
二 算法和算法的复杂度
(一) 算法
1 概念
算法是对问题求解步骤的描述,通过有限序列的指令来实现。
2 五大特征
有穷性:有限步之后结束,不会出现无限循环。
确定性:不存在二义性。算法的每个步骤都被精确定义。
可行性:比如受限于计算机的计算能力,有些算法虽然理论上可行,但实际上无法完成。
输入:能被计算机处理的各种类型数据
输出:一至多个程序输出结果
(二) 算法的复杂度
1 时间复杂度
-
它用来衡量算法随着问题规模增大,算法执行时间增长的快慢。
-
时间复杂度是问题规模的函数:记作T(n),时间复杂度主要分析T(n)的数量级。
-
T(n)=O(f(n)),大O记法,f(n)是算法中的基本运算的频度,一般考虑最坏情况下的时间复杂度。
计算方法:取算法时间增长最快的那个函数项,把它的系数改为1
2 空间复杂度
-
它是用来衡量算法随着问题规模增大,算法所需空间的增长的快慢
-
是问题规模的函数:S(n)=O(g(n))
3 常用的时间复杂度大小关系
Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<Ο(2n)
PS:log2n更多写成logn
从左至右,时间性能依次降低。
(三) 时间复杂度的计算
-
一般可以直接关注循环段基本操作语句的执行次数。
-
两个循环体是独立的,采用加法规则
-
两个循环体是嵌套的,采用乘法规则
(四) 空间复杂度的计算
空间复杂度S(n)指算法运行过程中所使用的辅助空间的大小。
记为:S(n)=O(f(n))
-
辅助空间:除了存储算法本身的指令、常数、变量和输入数据外,还需要存储对数据操作的存储单元。
-
算法原地工作是指算法所需的辅助空间是常量,即O(1)。