1.1 数据结构的基本概念
1.1.1 基本概念和术语
基本概念和术语 数据 数据元素 数据对象 数据类型 数据结构
1、数据
2、数据元素
数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。
一个数据元素由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。
例如:学生记录为一个数据元素,由学号、姓名、性别等数据项组成。
3、数据对象
4、数据类型
不同的语言中,int的取值范围是不一样的
数据类型是一个值的集合和定义在此集合上的一组操作的总称
1)原子类型其值不可再分的数据类型,如:bool类型、int类型。
2)结构类型
其值可以再分解为若干成分(分量)的数据类型。
3)抽象数据类型(ADT)
ADT描述了数据的逻辑结构和抽象运算,通常用(数据对象,数据关系,基本操作集)这样的三元组表示,从而构成一个完整的数据结构定义。
当我们在定义一个抽象数据类型的时候,其实就是用数学化的语言定义了数据的逻辑结构和对这种数据的运算,而只有当我们实际地用计算机去实现这种数据结构的时候,才需要考虑到到底使用哪种存储结构。所以抽象数据类型并不关心数据的存储结构,只关心另外两个要素
5、数据结构
数据对象:强调的是在该数据对象集合中,数据元素具有相同的性质
数据结构:强调数据元素之间存在某种特定关系
注意区分
1.1.2 数据结构三要素
数据结构包括三个要素,缺一不可。
数据的逻辑结构是从面向实际问题的角度出发,只采用抽象表达方式,独立于存储结构,而数据的存储方式有不同的选择;
而数据的存储结构是逻辑结构在计算机上的映射,它不能独立于逻辑结构而存在。
1、数据的逻辑结构
逻辑结构指数据元素之间的逻辑关系,即从逻辑关系上描述数据。
数据的逻辑结构分为线性结构和非线性结构
线性结构 非线性结构 线性表 集合
树
图
(1)集合
(2)线性结构
(3)树状结构
(4)图状结构
2、数据的物理结构(存储结构)
也常被称之为数据的存储结构
数据的存储结构所要探讨的问题是:如何用计算机表示数据元素的逻辑关系
在存储数据时,不仅要存储数据元素的值,而且要存储数据元素之间的关系
数据的存储结构主要有:
- 顺序存储
- 链式存储
- 索引存储
- 散列存储
(1)顺序存储
(2)链式存储
(3)索引存储
(4)散列存储
又称哈希(Hash)存储
顺序存储 | 链式存储 | 索引存储 | 散列存储 | |
---|---|---|---|---|
优点 | 随机存取 | 无碎片 | 检索快 | 检索、增减结点快速 |
缺点 | 外部碎片 | 顺序存取 | 消耗存储空间存放索引表;存储指针占额外空间 | 若散列函数不好,可能出现元素存储单元冲突,而解决冲突会增加时间和空间的开销 |
【Notes】
3、数据的运算
【知识回顾与重要考点】
1.2 算法和算法评价
1.2.1 算法的基本概念
【5个重要特性】
一个算法需要具有以下五个重要特性
- 有穷性
- 确定性
- 可行性
- 输入
- 输出
【“好”算法标准】
设计一个“好”的算法应考虑达到以下目标
- 正确性
- 可读性
- 健壮性
- 效率与低存储量需求
1.2.2 算法效率的度量
(一) 时间复杂度 (二) 空间复杂度 *考研主要考察的是时间复杂度
算法效率的度量是通过时间复杂度和空间复杂度来描述的
1、时间复杂度
T表示time
用问题规模n表示出算法的时间开销T(n)
【简化时间复杂度表达式】
【分析时间复杂度的两条规则】
加法规则:多项相加,只保留最高阶的项,且系数变为1;
乘法规则:多项相乘,都保留。
【常见的渐近时间复杂度】
【常对幂指阶】
【时间复杂度计算】
【最好最坏平均复杂度】
最好时间复杂度没有参考意义
2、空间复杂度
【程序运行时的内存需求】
即,与问题规模n无关的变量不用关注
每一层的递归调用所需要的内存空间大小都是一个常量,k个字节,但是也存在一些算法,它们每一层递归调用所需要的内存空间大小是不一样的,如下
实际考试不会考察这种复杂的情况,一般考察的都是“空间复杂度=递归调用的深度”这种情况。