数据结构:初识(数据结构、算法与算法分析)
- 2020 年 7 月 21 日
- 筆記
- dataStructure&Algorithm
1、数据结构初识
(1)程序、数据结构与算法的关系
程序=数据结构+算法
(2)数据
概念:
- 是能够输入到计算机的能够被计算机处理的各种符号的集合
- 信息的载体
- 对客观事物的抽象化表示
- 能够被计算机识别、存储和加工
例如:将用户的信息抽象为一张二维表,存储到数据库中
分类:
- 数值型数据:整数、实数等,能够进行数值运算
- 非数值型数据:文字、图像、图片、声音等
(3)数据元素和数据项
数据元素:是数据的基本单位,在计算机中通常作为一个整体考虑和处理(例如:学生退学后删除某一学生的信息),也称为元素、记录、结点、顶点
数据项:构成数据元素的不可分割的最小单位,例如:学生的学号
数据、数据元素、数据项的关系:
整张数据表是用户的数据,用户的用户名是数据项、每一个用户的信息是一个数据元素
(4)数据对象
概念:
是性质相同的数据元素的集合,是数据的一个子集
(5)数据结构
概念:
数据元素之间的关系
数据结构的内容:
- 逻辑结构:数据元素之间的逻辑关系
- 物理结构:数据元素及其关系在内存中的表示
- 数据的运算和实现:对数据元素可以施加的操作以及这些操作在相应的存储结构上的实现
逻辑结构的分类:
- 线性结构:有且仅有一个开始结点和终端结点,并且所有的结点都最多只有一个直接前驱和直接后继,例如:线性表、栈、队列、串
- 非线性结构:一个结点有多个直接前驱和直接后继,例如:树、图
存储结构
- 顺序结构:用一组连续的存储单元依次存储数据元素
- 链式结构:一组任意的存储单元来存储数据,数据之间的逻辑关系用指针来表示,如:链表
(6)数据类型和抽象数据类型
数据类型规定了数值的取值范围以及操作,是一组性质相同的值的集合以及定义在这个集合上的一组操作的总称
抽象数据类型(ADT abstrace data type):一个数学模型以及在数学模型(逻辑结构)上的一组操作,不考虑在计算机内的具体存储与运算的具体实现算法
三要素:
- 数据对象:例如:定义复数的时候有实部和虚部
- 数据关系:例如:x是实部,y是虚部
- 数据操作:定义、销毁、获得实部、虚部等
2、算法与算法分析
(1)算法的描述
- 自然语言:用自然语言描述算法的过程
- 流程图:传统流程图、NS流程图
(2)算法和算法分析
- 算法是解决问题的一种方法或一个过程,考虑如何将输入转换为输出,一个问题可以有多个算法
- 程序是用某一种语言对算法的具体实现
(3)数据结构和算法的关系
- 数据结构是算法的基础
- 算法的操作对象是数据结构,在设计算法的时候要构建合适这种算法的数据结构
- 数据结构设计主要是选择数据的存储方式(数组或链表),算法设计是在选定的数据结构上设计一个满足要求的好的算法
- 数据结构关注的是数据的逻辑结构、存储结构、基本操作,而算法关注的是如何在数据结构的基础上解决实际问题
(4)什么是算法
算法是求解问题的一系列步骤,用来将输入的数据转换为输出结果
(5)算法的重要特性
- 有限性:执行有限步之后结束
- 确定性:每一条指令无二义性
- 可行性:每一条运算都能精确地执行
- 输入性:一个算法有零个或多个输入
- 输出性:一个算法有一个或多个输入
(6)算法设计的目标
- 正确性:正确地执行预先规定的功能和性能要求
- 可使用性(用户友好性):可以很方便地使用
- 可读性:易于理解
- 健壮性(鲁棒性):提供异常处理,能够对不合理的数据进行检查
- 高效率与低存储:执行时间短的算法效率高,所需的最大存储容量低的算法好
(7)算法时间效率的度量
- 事后统计:不可取
- 事前分析:一个算法的运行时间是指一个算法在计算机上运行所耗费的时间,大致等于计算机执行一种简单的操作(赋值、比较等)所需的时间与执行这种简单操作的次数的乘积。因为每一条语句的执行时间大致相同,因此,可以只计算语句的频度(语句的次数)//www.cnblogs.com/zhai1997/p/12034257.html时间复杂度是由嵌套最深的语句频度决定的
(8)空间复杂度
如:数组倒序