数据结构的基本概念
1.1基本概念
- 数据时信息的载体,是计算机程序加工的原料
- 数据元素是数据的基本单位
数据元素由数据项组成,数据项是构成数据元素的不可分割的最小单位
eg:学生记录是一个数据元素,学号姓名性别就是数据项
- 数据对象时具有相同性质的数据元素的集合
- 数据类型
原子类型:其值不可再分的类型。eg:int,bool
结构类型:其值可以分为若干成分的数据类型。eg:struct
抽象数据类型:对数据的某种抽象。抽象数据类型可以定义一个完整的数据结构。因为抽象数据类型定义了数据的取值范围及其结构形式,以及对数据操作的集合
- 数据结构:相互之间存在一种或多种关系的数据元素的集合。包括逻辑结构,存储结构和数据的计算
逻辑结构和存储结构是密不可分的两个方面。但是!!逻辑结构独立于存储结构,而存储结构是逻辑结构在计算机的映射,不能独立于逻辑结构而存在。
解释:一个数据的首先拥有逻辑结构,同一逻辑结构可以有多种存储结构的表示
1.2数据结构的三要素
1.2.1逻辑结构
逻辑结构独立于计算机存在。
分类:
- 线性结构:结构中的元素只存在一对一的关系
- 一般线性表
插入和删除位置受限制的线性表:
- 栈
- 队列
- 串
线性表的推广:数组
除了第一个元素外,每一个元素都有且只有一个直接前驱,除了最后一个元素之外,每一个元素都有且只有一个直接后继。
- 非线性结构
集合:结构中的元素除了属于同一个集合以外,没有其他任何的关系
树形结构:结构中的元素存在一对多的关系
图状结构:结构中的元素存在多对多的关系
1.2.2存储结构
存储数据时要存储个数据元素的
- 顺序存储。逻辑上相邻的元素在物理上也相邻
- 链式存储。逻辑上相邻的元素在物理上不一定相邻
- 索引存储。
- 散列存储。
1.2.3数据的运算
施加在数据上的运算包括运算的定义(针对逻辑结构)和实现(针对存储结构)
1.3算法的基本概念
算法是对特定问题求解步骤的一种描述。
主要考察内容是时间复杂度和空间复杂度的计算
算法的特性(了解)
- 有穷性 一个算法必须在有穷步后结束,且每一步都在有穷时间完成
- 确定性 每条指令必须有确切定义,相同输入相同输出
- 可行性 可以通过已经实现的基本运算的有限次来实现
- 输入 可以有零个或多个输入
- 输出 有一个或多个输出
好的算法应考虑的目标(了解)
- 正确性
- 可读性
- 健壮性
- 高效率与低存储量
算法效率的度量
时间复杂度和空间复杂度是后续每一个算法所必须掌握的知识点,十分重要!!!!!!
1.1.1时间复杂度
记忆:O(1)<O(logn)<O(n)<O(nlogn)<O(n的平方)<O(n的三次方)<O(2的n次方)<O(n!)<O(n的n次方)
加法规则:时间复杂度相加,只保留时间复杂度高的那一个
乘法规则:时间复杂度都保留
时间复杂度的具体实现方法利用王道课后题计算寻找规律,在文末讲解。
1.1.2空间复杂度
除了输入和程序之外的额外空间还需要什么规模的空间来辅助。
王道课后题
时间复杂度的计算包括单层循环,双层循环和多层循环,主要解释单层循环和双层循环的解题步骤:
单层循环
- 首先写出循环躺数
- 写出每次循环时未知数的值
- 找到未知数和循环躺数之间的代数关系
- 找到结束循环时的关系式
- 联立两个方程,得到t和n的关系式即时间复杂度
双层循环
双层循环有两种方式来找寻时间复杂度
方法一:
- 找到外层循环的循环躺数
- 找到内层循环的执行次数
- 求和即可
方法二:
- 用表达式来求值