一.数据结构的基本概念和术语
数据结构是一门研究非数值计算程序设计中的操作对象,以及这些对象之间的关系和操作的学科。
数据:客观事物的符号表示,是所有能输入计算机中并被计算机程序处理的符号的总称。
数据元素:用于完整的描述一个对象、是数据的基本单位。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
数据对象:是性质相同的数据元素的集合,是一个是数据的一个子集。只要集合内元素的性质均相同,都可以成为一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
数据结构包括逻辑结构和存储结构。
1.逻辑结构
逻辑结构是逻辑关系上描述数据,与数据的存储无关,可以看做从具体问题中抽象出来的数据模型。
有两个元素:数据元素和关系。
数据的逻辑结构有四种:
集合结构:数据元素除“属同一集合”的关系外,别无其他关系。
线性结构:数据元素之间存在一对一的关系。
树结构:数据元素之间存在一对多的关系。
图结构或网状结构:数据元素之间存在多对多的关系。
集合结构、树结构、图结构或网状结构都属于非线性结构。
2.存储结构
数据对象在计算机中的存储表示成为数据的存储结构,也称为物理结构。
数据元素在计算机中有两种基本的存储结构,顺序存储结构和链式存储结构。
顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑结构。通常借助数组类型进行描述。
链式存储结构是通常用指针类型加以描述。
二、数据类型和抽象数据类型
数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
抽象数据类型:一般指由用户定义的、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称,包括三个部分:数据对象、数据对象上的关系的集合以及对数据对象的基本操作的集合。
三、算法和算法分析
算法是为了解决某类问题而规定的一个有限长的操作序列。
算法的五个重要特性:有穷性、确定性、可行性、输入、输出
评价一个算法的优劣:正确性、可读性、健壮性、高效性。
算法的时间复杂度
算法的时间复杂度取决于问题的规模和待处理数据的初态。最主要的是取决于问题的规模。
一个算法的执行时间大致上等于其所有语句执行时间的总和,而语句的执行时间则为该条语句的重复执行次数和执行一次所需时间的乘积。
一条语句的重复执行次数称为语句频度。
一般,算法中基本语句重复执行的次数是为规模n的某个函数f(n),算法的时间量度记作:
T(n)=O(f(n))
常见的时间复杂度按数量级递增排列依次为:常量阶O(1)、对数阶O(log2n)、线性阶O(n)等。
最好时间复杂度:算法在最好情况下的时间复杂度
最坏时间复杂度:算法在最坏情况下的时间复杂度
平均时间复杂度:算法在所有可能情况下的,按照输入实例以等概率出现时,算法计算量的加权平均值。
算法的空间复杂度
作为算法所需储存空间的量度,简称空间复杂度。