今日一言:“我们一直都觉得某些事物的存在是理所当然的,
但是这世上没有什么是永远存在的。
这种理所当然的东西,
人们只有失去时才会懊悔不已。”
——《齐木楠雄的灾难》
数据结构 —— 绪论
决定二刷数据结构。
目录
- 1.1 什么是数据结构
- 1.2 基本概念和术语
- 1.3 抽象数据类型的表示与实现
- 1.4 算法和算法分析
- 1.4.1 算法
- 1.4.2 算法设计的要求
- 1.4.3 算法效率的度量
- 1.4.4 算法的存储空间需求
1.1 什么是数据结构
程序 = 数据结构 + 算法
数据结构:一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。
1.2 基本概念和术语
数据结构
数据:所有能输入到计算机中并被计算机程序处理的符号的总称。
数据元素:数据的基本单位。
数据项:可为数据元素的各个属性。
数据对象:性质相同的数据元素的几何,是数据的一个子集。
数据结构:数据元素和数据元素关系的集合。
结构:数据元素间的关系。
基本数据结构:
- 集合:数据元素间除同属一个集合外,无其它关系。
- 线性结构:数据元素间一个对一个的关系。
- 树状结构:数据元素间一个对多个的关系。
- 图状结构:数据元素间多个对多个的关系。
数据结构形式定义:
D是数据元素的有限集,S是D上关系的有限集。
Data_Structure = (D,S)
数据结构关系和表示
逻辑结构:数据结构中描述的是数据元素之间的逻辑关系。
物理结构:数据结构在计算机中的表示(映像),又称存储结构。
计算机中的表示单位:位、元素(结点)、数据域。
物理结构分类:
- 顺序存储结构:顺序映像,即存储器中的相对位置表示逻辑关系。
- 非顺序存储结构:非顺序映像,即借助指针表示逻辑关系。
数据类型
数据类型:一个值的集合和定义在这个值集上的一组操作的总称。
数据类型分类:
- 原子类型:非结构且值是不可分解的,如整形、实型、字符型和枚举类型…
- 结构类型:是由若干成分按某种结构组成的类型,成分中可为结构的,也可为非结构的。
1.3 抽象数据类型的表示与实现
抽象数据类型:指一个数学模型以及定义在该模型上的一组操作。
抽象数据类型分类:
- 原子类型: 不可分割的抽象类型。(还是得和上面的原子类型区分)
- 固定聚合类型:其变量的值由确定数目的成分按某种结构组成。
- 可变聚合类型:与固定聚会类型比,其变量的值的成分数目不确定。
本节其余内容为C语言基础。
1.4 算法和算法分析
1.4.1 算法
算法:对特定问题求解步骤的一种描述,是指令的有限序列。
算法特性:
- 有穷性: 有始有终。
- 确定性: 每一条指令含义确定,不搞双标(二义性)。
- 可行性: 算法是可行的。
- 输入 : 一个算法有零个或多个输入。
- 输出 : 一个算法有零个或多个输出。
1.4.2 算法设计的要求
- 正确性:
- 语法无误
- 程序对于几组输入数据能够得出满足规格说明要求的结果。
- 对于精心选择的典型、苛刻而待有刁难性的数据也能得出满足规格说明要求的结果。
- 只要是合法的输入数据都能产生满足规格说明要求的结果。
- 可读性: 满足人的阅读与交流。
- 健壮性: 输入数据非法时,能够做出适当的处理。
- 效率与低存储量:算法的执行时间和所需的最大存储空间。
1.4.3 算法效率的度量
算法效率:通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。
- 事后统计 利用计算机内的计时功能,不同算法可用一组或多组相同的统计数据区分。
- 缺点(1):必须先运行依据算法编制的程序。
- 缺点(2):所得时间统计量依赖于硬件、软件等环境因素,易掩盖算法本身的优劣。
- 事前分析估计: 算法效率取决于:
- 依据的算法选用何种策略
- 问题的规模
- 程序语言
- 编译程序产生的机器代码质量
- 机器执行指令速度
时间复杂度:算法的时间量度,是渐近时间复杂度的简称。
记:
频度:该语句重复执行的次数。
1.4.4 算法的存储空间需求
空间复杂度:算法所需存储空间的量度。