什么是数据结构
定义
数据是描述客观事物的数和字符的集合,而数据元素作为数据的基本单位,在有些情况下,数据元素也称为元素,结点,顶点或者记录等。一个数据元素可以由若干个数据项组成。
数据项是具有独立含义的数据最小单位,也称为字段或域
数据对象是指性质相同的数据元素的集合,它是数据的一个子集
数据结构是指所有数据元素以及数据元素之间的关系,可以看作是相互之间存在着某种特定关系的数据元素的集合
数据结构通常包含以下几个方面:
- 数据的逻辑结构:由数据元素之间的逻辑关系构成
- 数据的存储结构:数据元素及其关系在计算机存储器中的存储表示,也称为数据的物理结构
- 数据的运算:施加在该数据上的操作
逻辑结构
数据的逻辑结构是从数据元素的逻辑关系上描述数据的,是指数据元素之间的逻辑关系的整体,通常是从求解问题中提炼出来的。
逻辑结构的表示:
- 图表表示
- 二元组表示
逻辑结构的类型:
- 集合
- 线性结构
- 树形结构
- 图形结构
存储结构
数据逻辑结构在计算存储器中的存储表示称为数据的存储结构(也称为映像),也就是逻辑结构在计算机中的存储实现。
常用的4种存储结构类型:
- 顺序存储结构:采用一组连续的存储单元存放所有的数据元素,所有的数据元素在存储器中占有一整块存储空间,而且两个逻辑上相邻的元素在存储器中的位置也相邻。因此,数据元素之间的逻辑关系由存储单元地址间的关系隐含表示,即顺序存储结构将数据的逻辑结构直接映射到存储单元。
- 链式存储结构:每个逻辑元素用一个内存结点存储,每个结点是单独分配的,所有的结点地址不一定是连续的,所以无需占有一整块内存空间。
- 索引存储结构:在存储数据元素信息的同时还建立附加的索引表。存储所有数据元素信息的表称为主数据表,其中每个数据元素有一个关键字和对应的存储地址。
- 哈希(或散列)存储结构:基本思想是根据元素的关键字通过哈希(或散列)函数直接计算出一个值,并将这个值作为该元素的存储地址。
数据运算
数据运算是指对数据实施的操作。
数据类型和抽象数据类型
数据类型: 一组性质相同的值的集合和定义在此集合上的一组操作的总称,是某种程序设计语言中已实现的数据结构。
抽象数据类型: 用户进行软件系统设计时从问题的数学模型中抽象出来的逻辑数据结构和逻辑数据结构上的运算,而不考虑计算机的具体存储结构和运算的具体实现算法。
算法及其描述
什么是算法
算法是对特点问题求解步骤的一种描述,它是指令的有限序列。
一个算法应具有以下5个重要的特性:
- 有序性
- 确定性
- 可行性
- 有输入
- 有输出
算法设计的目标
- 正确性: 能够正确地执行预先规定的功能和性能要求
- 可使用性: 能够很方便的使用
- 可读性: 算法的逻辑性必须清晰,简单和结构化
- 健壮性: 算法具有很好的容错性,即提供异常处理,能够对不合理的数据进行检查,不经常出现异常中断或死机现象
- 高效率和低存储量需求: 通常算法的效率主要指算法的执行时间,算法存储量指的是算法执行过程中所需的最大存储空间。效率和存储空间都与问题的规模挂钩
算法分析
算法分析概述
算法分析就是分析算法占用计算机资源的多少。目的是分析算法的时空性能以便改进算法。
算法时间性能分析
算法时间性能分析方法:
- 事后统计法:编写算法对应程序,统计其执行时间
- 事前估计法:仅考虑算法本身的效率高低 (主要使用)
算法时间复杂度分析:
- 计算算法的频率T(n)
- T(n)用“O”表示
(算法时间复杂度也称为渐进时间复杂度,它表示随问题规模n的增大,算法执行时间的增长率和 f(n)的增长率相同) - 简化的算法时间复杂度分析
- 时间复杂度的求和,求积定理
O(1)<O(log₂n)<O(n)<O(nlog₂n)<O(n²)<O(n³)<O(2ⁿ)<O(n!)
算法空间性能分析
算法空间复杂度分析: 算法空间复杂度是对一个算法在运行过程中临时占用的存储空间大小的量度。
S(n)=O(g(n)) O的含义与时间复杂度的含义相同