数据结构是一门研究非数值计算程序设计中的操作对象,以及这些对象之间的关系的学科。
基本概念
数据
客观事实的符号表示,是所有能输入到计算机中并被计算机程序处理的符号得到总称。
数据元素
数据的基本单位
数据项
组成数据元素的、有独立含义的、不可分割的最小单位。
数据对象
性质相同的数据元素的集合,是数据的一个子集。
数据结构
数据结构是相互之间存在一钟
逻辑结构
数据的逻辑结构是从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
数据的逻辑结构有两个要素:数据元素和关系
关系如下:
集合结构
数据元素之间除属于同一集合的关系外无其他关系。
线性结构
数据元素之间存在一一对应的关系。
数结构
数据元素之间存在一对多的关系。
图结构或网络结构
数据元素存在多对多的关系
(缺逻辑结构层次图,另补)
存储结构
数据对象在计算机中的存储,也叫物理结构。
顺序存储结构
借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。
链式存储结构
链式存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无需占用一整块存储空间。但为了表示结点之间的关系,需要给每个结点附加指针字段,用于存放后继元素的存储地址。所以链式存储结构通常借助于程序设计语言的指针类型来描述。
链式存储结构比顺序存储传构要求高、顺序存储结构必须要分配而链顺序存储结构不需要进行预分配。
数据类型和抽象数据类型
数据类型
高级程序设计语言中的一个基本概念,是一个值的集合和定义在这个值集上的一组操作总称。
抽象数据类型
一般指用户自定义、表示应用问题的数学模型,以及定义在这个模型赏读一组操作总称,包括数据对象,数据对象上关系的集合以及数据对象的基本操作集合。
算法和算法分析
算法特性
算法是为了解决某类问题而规定的一个有限长的操作序列。
有穷性
一个算法必须总是在执行有穷步后结束,且每一步 都必须在有穷时间内完成。
确定性
对于每种情况下所应执行的操作,在算法中都有确切的规定,不会产生二义性,使算法的执行者或阅读者都能明确其含义及如何执行。
可行性
算法中的所有操作都可以通过已经实现的基本操作运算执行有限次来实现。
输入
一个算法有零个或多个输人。当用函数描述算法时,输人往往是通过形参表示的,在它们被调用时,从主调函数获得输人值。
输出
一个算法有一一个或多个输出,它们是算法进行信息加工后得到的结果,无输出的算法没有任何意义。当用函数描述算法时,输出多用返回值或引用类型的形参表示。
评价算法优劣的基本标准
正确性
可读性
健壮性
高效性
算法的时间复杂度
衡量方法:事后统计法,事前分析估计法
问题规模和语句频度
不考虑环境因素,影响算法时间代价的主要因素是问题规模
问题规模是算法求解问题输入量的多少,是问题大小的本质表示。
一条语句的重复次数是语句频度。
算法的时间复杂度定义
一般情况下,算法中基本语句重复执行的次数是问题规模n的某个函数,算法的时间量度记作它表示随问题规模n的增大,算法执行时间的增长率和和增长率相同,称作算法的渐进时间复杂度,又称时间复杂度。
算法的空间复杂度
空间复杂度类似于时间复杂度,作为算法所需存储空间的度量,简称空间复杂度,也是问题规模n的函数,记作。