数据结构的基本概念
-
数据
数据是对客观事物的符合表示,在计算机科学中是指所有能输入到计算机中并且被计算机程序处理的符合的总称。例如,整数、实数和字符串都是数据。
-
数据元素
数据元素时数据的基本单位,在计算机程序中通常将其作为一个整体进行考虑或处理。一个数据元素可以由若干个数据项组成。
-
数据项
数据项是数据结构中讨论的最小单位,是数据记录中最基本的、不可分的数据单位。
-
数据对象
数据对象是性质相同的数据元素的集合,是数据的一个子集。
-
数据结构
数据结构是指相互之间存在的一种或多种特定关系的数据元素的集合。数据结构包含3方面的内容:逻辑结构、存储结构和对数据的运算。
-
数据的逻辑结构
数据的逻辑结构是对数据之间关系的描述,它与数据的存储结构无关,同一种逻辑结构可以有多种存储结构。
数据的逻辑结构主要有以下两类:
- 线性结构
线性结构是一个数据元素的有序集合,主要有以下四个基本特征:
- 集合中必须存在唯一的一个“第一个元素”
- 集合中必须存在唯一的一个“最后一个元素”
- 除了最后一个元素之外,其它数据元素均有唯一的“后继”
- 除了第一个元素之外,其它数据元素均有唯一的“前驱”
数据结构中,线性结构是指数据元素之间存在着“一对一”的线性关系的数据结构
- 非线性结构
与线性结构不同,非线性结构中结点存在着一对多的关系,它又可以细分为树形结构和图形结构。
-
数据的物理结构
也就是存储结构,是数据的逻辑结构在计算机中的表示(又称映像)。它包含数据元素的表示和关系的表示。当数据元素时由若干数据项构成的时候,数据项的表示称为数据域。
数据元素之间的关系在计算机中有两种不同的表示方法:顺序映像和非顺序映像。对应两种不同的存储结构分别是顺序存储结构和链式存储结构。
在数据结构中有以下四种常用的存储方法:
- 顺序存储方法:逻辑上相邻的两个结点存储在屋里位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现。
- 链式存储方法:不要求逻辑上相邻的结点在屋里位置上也相邻,结点间的逻辑关系由附加的指针字段表示。
- 索引存储方法:在存储结点信息时,除建立结点信息外,还建立附加的索引表来标识结点的地址。索引项的一般形式
<关键字,地址>
。关键字标识唯一一个结点,地址作为指向结点的指针。 - 散列存储方法:根据结点的关键字通过散列函数直接计算出该结点的存储地址。
算法的基本概念
-
算法
算法可以理解为由基本运算及规定的运算顺序所组成的完整的解题步骤,或者是看成按照要求设计好的有限的确切的计算序列。
-
算法的特性
- 有穷性:必须保证执行有限步之后结束
- 确定性:每一步必须有确定的定义
- 输入:有0个或多个输入
- 输出:有一个或多个输出
- 可行性:所有操作必须可以通过已经实现的基本操作进行运算
-
算法的设计目标
正确性、可读性、健壮性和算法效率
-
程序
程序是算法用某种程序设计语言的具体实现。程序可以不满足算法的有限性。
-
算法复杂度是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂度,需要的空间资源的量为空间复杂性
- 时间复杂度和空间复杂度是只依赖与算法求解的问题规模和算法输入函数
- N、I分别表示算法求解的问题规模和算法输入,则算法的时间复杂度T和空间复杂度S可以分别表示为:
- T = T(N, I)
- S = S(N, I)
-
影响算法执行时间的因素:
- 计算机配置
- 问题规模
- 输入实例
-
时间复杂度:
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数,记作T(n)=O(f(n)),它称为算法的渐进时间复杂度,简称时间复杂度
将算法中基本操作执行的次数作为算法时间复杂度的度量。
常用时间复杂度的比较关系:
O(1)<=O(log2(n))<=O(n)<=O(nlog2(n))<=O(n2)<=O(n3)<=···<=O(nk)<=O(2n)
-
求解算法时间复杂度的步骤
- 确定算法中的基本操作以及问题的规模
- 根据基本操作执行情况计算出规模n的函数f(n),并确定时间复杂度为T(n)=O(f(n)中增长最快的项/此项的系数)
-
算法的空间复杂度
算法的空间复杂度指算法在运行时所需存储空间的度量,主要考虑在算法运行过程中临时占用的存储空间的大小。