1.1 重点难点
1.2 主要内容
1.2.1 数据的逻辑结构
从概念上来讲,一个数据结构是由一组同类的数据元素依据某种联系组织起来的。数据元素之间的逻辑关系称为数据的逻辑结构。
数据的逻辑结构有以下四种:
(1)集合结构:
元素之间的次序是任意的。元素之间除了“属于同一集合”的联系外没有其他的关系。由于集合结构的元素见没有固有的关系,因此可以借助于其他结构来表示集合结构。
(2)线性结构:
数据元素构成一个有序序列。其中,第一个元素只有后继没有前驱,最后一个元素只有前驱没有后继。除了第一个和最后一个元素外,其余元素都有一个前驱和一个后继。
(3)树形结构:
除了一个特殊的根元素外,每个元素有且仅有一个前驱,后继数目不限。根元素没有前驱。树形结构表示的是一种层次关系。
(4)图形结构:
图是最一般的逻辑结构,图中的每个元素的前驱和后继数目都不限。
1.2.2 数据结构的存储实现
每个数据元素存放在一个称为结点的单元中。一个结点通常是一种内置类型、记录类型或类类型的对象。数据元素之间的关系通常有下列4种方式来存储。
(1)顺序实现:
所有的结点存放在一块连续的存储区域中,结点之间的逻辑关系可以通过结点的存储位置来体现。在高级语言中,一块连续的存储空间通常可用一个数组来表示。因此,顺序实现通常用一个数组来存储,数组元素的类型就是结点的类型,结点之间的关系通过数组元素的下标来体现。
(2)链接实现:
结点可以分散地存放在存储器的不同位置,结点之间的关系通过一个或多个指针显式地指出。因此,在链接存储中,每个存储结点包含两个部分:数据元素部分和指针部分。数据元素部分保存数据元素的值;指针部分保存一组指针,每个指针指向一个与本结点有逻辑关系的结点。
(3)散列存储方式:
是专用于集合结构的数据存放方式。在散列存储中,各个结点均匀地分布在一块连续的存储区域中,用一个散列函数将数据元素和存储位置联系起来。
(4)索引存储方式:
所有的结点按照数据生成的次序连续存放。另外设置一个索引区域表示结点之间的关系。
1.2.3 算法分析
算法分析确定算法的性能随处理的数据量变化的规律,是评价算法优劣的依据。算法分析通常从时间和空间两个方面展开。算法的时间性能称为时间复杂度,空间性能称为空间复杂度。前者指算法包含的运算量,后者指算法需要的存储量。
空间复杂度的讨论比较简单,它关心的是除了被处理的数据所占的空间之外所需的额外空间的大小。空间复杂度一般按最坏情况来分析。
在算法分析中,时间性能通常用最好情况的时间复杂度、最坏情况的时间复杂度以及平均情况的时间复杂度来描述。
算法的运算量可以用一个时间函数来刻画。算法的运行时间函数可能是一个很复杂的函数,解决同一问题的不同算法会有不同的运行时间函数。时间性能主要考虑的是当处理的数据量很大时运行时间随问题规模的变化规律。
在算法分析中,不考虑具体的时间函数,只考虑时间函数的数量级。这种方法称为渐进表示法。最常见的渐进表示法是大O表示法。
函数 | 名称 |
---|---|
1 | 常量 |
logN | 对数 |
N | 线性 |
NlogN | NlogN |
N^2 | 平方 |
N^3 | 立方 |
2^N | 指数 |
N! | 指数 |
N^N | 指数 |
时间复杂度函数为多项式函数的算法称为多项式时间算法,时间复杂度函数为指数函数的算法称为指数时间算法。多项式时间的算法要比指数时间的算法好。为计算