数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理,也简称为元素,或称为记录、结点或顶点
构成数据元素的不可分割的最小单位
是性质相同的数据元素的集合,是数据的一个子集
数据元素不是孤立存在的,它们之间存在着某种关系,数据元素相互之间的关系称为结构(Structure)
是指相互之间存在一种或多种特定关系的数据元素集合;或者说,数据结构是带结构的数据元素的集合
数据结构包括以下三个方面的内容:
有且仅有一个开始和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继
例如:线性表、栈、队列、串
一个结点可能有多个直接前取和直接后继
例如:树、图
用一组连续的存储单元依次存储数据元素,数据元素之间的逻辑关系由元素的存储位置来表示
例如:C语言中用数组来实现顺序存储结构
用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示
例如:C语言中用指针来实现链式存储结构
在存储结点信息的同时,还建立附加的索引表
索引表中的每一项称为一个索引项
索引项的一般形式是:(关键字,地址)
关键字是能唯一标识一个结点的那些数据项
若每个结点在索引表中都有一个索引项,则该索引表称为稠密索引(DenseIndex)。若一组结点在索引表中只对应一个索引项,则该索引表称之为稀疏索引(SparseIndex)
根据结点的关键字直接计算出该结点的存储地址
在使用高级程序设计语言编写程序时,必须对程序中出现的每个变量、常量或表达式明确说明它们所属的数据类型
高级语言中的数据类型明显地或隐含地规定了在程序执行期间变量的所有可能的取值范围,以及在这些数值范围上所允许进行的操作
数据类型的作用:
定义:数据类型是一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称
数据类型=值的集合+值集合上的一组操作
定义:是指一个数学模型以及定义在此数学模型上的一组操作
抽象数据类型的形式定义:
抽象数据类型可用(D,S,P)三元组表示。
其中:D是数据对象;S是D上的关系集;P是对D的基本操作集
一个抽象数据类型的定义格式如下:
ADT抽象数据类型名{数据对象:<数据对象的定义>数据关系:<数据关系的定义>基本操作:<基本操作的定义>}ADT抽象数据类型名其中:
基本操作定义格式说明:
参数表:赋值参数只为操作提供输入值。引用参数以&打头,除可提供输入值外,还将返回操作结果
初始条件:描述操作执行之前数据结构和参数应满足的条件,若不满足,则操作失败,并返回相应出错信息。若初始条件为空,则省略之
操作结果:说明操作正常完成之后,数据结构的变化状况和应返回的结果。
e.g.Circle
ADTCircle{数据对象:D={r,x,y|r,x,y均为实数}数据关系:S={
抽象数据类型可以通过固有的数据类型(如整型、实型、字符型等)来表示和实现
例如:抽象数据类型“复数”的实现
算法的描述:
程序=数据结构+算法
数据结构通过算法实现操作
算法根据数据结构设计程序
一个算法必须具备以下五个重要特性:
一个好的算法首先要具备正确性,然后是健壮性,可读性,在几个方面都满足的情况下,主要考虑算法的效率,通过算法的效率高低来评判不同算法的优劣程度
算法效率以下两个方面来考虑:
两种度量方法:
注意:每条语句的执行次数又称为语句频度
O:Order数量级
一般情况下,不必计算所有操作的执行次数,而只考虑算法中基本操作执行的次数,它是问题规模n个某个函数,用T(n)表示
基本语句:
若f(n)=\(a_{m}n^{m}\)+\(a_{m-1}n^{m-1}\)+...+\(a_1n\)+\(a_0\)是m次多项式,则T(n)=O(\(n^{m}\))
忽略所有低次幂项和最高次幂系数,体现出增长率的含义
请注意:有的情况下,算法中基本操作重复执行的次数还随问题的输入数据集不同而不同
[例]顺序查找,在数组中查找值等于e的元素,返回其所在位置
复杂度:O(1) 空间复杂度:算法所需存储空间的度量,记作:S(n)=O(f(n)),其中n为问题的规模(或大小)