数据及其逻辑结构
-
基本概念
数据(Data):信息的载体,是对客观事物的符号表示.数据元素(Data Element):数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理.
数据对象(Data Object):性质相同的数据元素的集合,是数据的一个子集.
逻辑结构(Logical Structure):数据元素之间的逻辑关系,通常数据的逻辑结构有四种基本逻辑结构:
-
数据结构
数据结构(Data Structire):没有个一公认的定义,我读的这本书中的定义:相互之间存在一种或多种特定关系的数据元素的集合,一般包括三个方面:数据的逻辑结构,数据的存储结构(数据的物理结构),数据的运算数据类型:明显或隐含地规定在程序执行期间各个变量或表达式的取值范围,存储方式,以及允许进行的运算,其中又可以分为简单(基本)数据类型和结构类型
-
存储实现与运算实现
存储实现:基本目的就是建立数据结构在计算机内部的表示和实现,包括数据以及逻辑关系的物理表达,也被称为存储结构或物理结构.常用的四种常用的存储结构类型:
结构类型定义 | 特点 |
---|---|
顺序存储结构(Sequential Storage Structure):逻辑上相邻的节点在物理位置上也相邻的存储单元,节点之间的逻辑关系则由存储单元的相邻关系来表达(主要用于线性数据结构) | 节点只存储数据本身,节点之间的逻辑关系没有占用额外空间,存储空间利用率高;数据结构中的每个节点的存储地址可以通过公式直接计算,第i个节点的存储地址为:Li=L0+(i-1)*B.L0为第一个节点的存储位置,B为每个节点所占用的存储单位个数;对节点进行插入删除运算,会引起大量的节点移动,操作不便 |
链式存储结构(Linked Storage Structure):逻辑相邻节点在物理上不一定相邻,节点之间的逻辑关系由附加的指针来表达,指针指向相邻的节点,通过指针把所有节点串联起来(链式存储结构一般有两部分组成,数据域,指针域(可以有多个指针)) | 除了数据域,还包含存储域的节点指针,比顺序存储结构浪费空间;物理上不必相邻可用于线性表,树,图等多种逻辑结构的存储;节点进行删除和插入比较灵活,不必移动节点,只需要移动指针指向就行 |
索引存储结构(Index Storage Structure):附加一个索引表,索引的每一项称作索引项利用索引项的值来确定节点的实际存储单元地址,索引项一般形式为关键字,地址,关键字唯一标识一个节点 | 检索速度快,直接对节点进行随机访问;插入删除快,只需要移动存储索引中对应节点的存储地址;附件索引表,空间开销大 |
散列存储结构(Hash Storage Structure):根据节点的关键字(散列函数,一般取模)直接计算出节点的存储地址 | 检索,增加删除节点快;因为通过散列函数会出现节点单元冲突碰撞,增大时间和空间开销 |
-
运算实现
运算实现依赖于存储结构 -
算法描述和算法分析
算法:是一组有穷的且定义明确的规则;算法的五个基本特征:
特征 | 描述 |
---|---|
有穷性(Finiteness); | 一个算法必须在执行又穷步数之后结束;并且每一步在有穷时间内完成 |
确定性(Dfiniteness); | 算法中的每一步都由明确的定义,且无多义性 |
可行性(Effectiveness); | 算法中的每一步都是可行的,可通过已经实现的基本操作执行有限次得以实现 |
输入(Input); | 有零个或者多个输入,初始化参数 |
输出(Output) | 有零个或者多个输出参数 |
好的算法还要考虑真确性,可读性,健壮性,高效性;
-
算法描述
自然语言,流程图,程序设计语言,伪代码等. -
算法分析(Algorithm Analysis)
算法分析就是对算法所消耗的资源进行估算;方法:事后统计法和事前分析估算法;
算法=控制结构(顺序,分支,循环)+原操作(固有数据类型的操作)
评估算法:时间复杂度和空间复杂度
O(1)常数阶<O(log2n)对数阶<O(n)线性阶<O(nlog2n)<O(n2)平方阶<O(n3)立方阶<O(2n)指数阶<O(n!)