1.1数据结构及常用术语含义
数据(data): 所有能输入到计算机中并被计算机程序处理的表示客观事物的符号的总体。
数据元素(data element):数据的基本单位,通常作为一个整体被对待和处理。
数据项(data item): 组成数据元素的、有独立含义的、不可分割的最小单位。一个数据元素可由若干个数据项组成。
数据对象(data object):具有相同性质的数据元素的集合,是数据的一个子集。
数据结构(data structure):数据元素之间存在的某种特定关系。它包括数据的逻辑结构、存储结构以及在这些结构上相应的操作。
逻辑结构(logic structure):数据元素之间的逻辑关系。
集合结构:结构中的数据元素之间除了同属于一个集合外,没有其他的关系。
线性结构:线性结构中的数据元素之间是一对一的关系。
树形结构:树形结构中的数据元素之间是一对多的关系。
图状结构或网状结构:结构中的元素之间是多对多的关系。
物理结构(physical structure):
又称存储结构(storage structure),即数据的逻辑结构在计算机中的表示(映像),包括数据元素的映像和关系的映像。数据元素的映像又称为结点(node),数据项的映像称为数据域(data field);关系的映像又分为顺序映象(sequential image)和非顺序映像(non-sequential image ) ,亦即顺序存储结构( sequential storage structure)和链式存储结构( linked storage structure)。
顺序存储结构:借助于数据元素在存储器中的相对位置来表示数据元素之间的逻辑关系。在程序设计语言中通常用数组类型来描述顺序存储结构。
链式存储结构:链式存储结构不要求数据元素存储在一整片连续的存储空间中。为了表示结点(数据元素)之间的关系,需要在每个结点附加指针域,用于存放后继结点的存储地址。在程序设计语言中通常用指针类型来描述链式存储结构。
数据类型(data type): 一组值的集合以及定义在这个值集上的一组操作的总称。在高级语言中,数据类型通常又分为原子类型(atomic data type)和结构类型(structural data type)。
原子类型(atomic data type):不可进一步分解的数据类型。
结构类型(structural data type):可进一步分解为原子类型或其它结构类型的数据类型。根据数据元素数目的不同又可分为固定聚合类型(fixed-aggregate data type)和可变聚合类型(variable-aggregate data type)。
抽象数据类型(Abstract Data Type-----ADT):定义在一个抽象的数学模型上的数据类型及相应操作。它只取决于数据类型的逻辑特性,而与数据类型在计算机内的表示和实现无关。
面向对象的程序设计(Object Oriented Programming--OOP)
对象(object ):
将数据的结构和操作作为一个整体来处理即是对象。它包括对象的三个特性:封装性(encapsulation)、继承性(inheritance)和多态性(polymorphism)。
1.2算法和算法分析
算法(algorithm)是对特定问题求解步骤的一种描述。它是指令的有限序列。
一个算法具有下面的五个重要特性:
1、有穷性(finite):对任何合法输入执行有穷步后能结束。
2、确定性(definitude):每条指令必须有确切的含义。
3、可行性(feasibility):算法的每一条指令均能执行。
4、输入(input):有零个或多个输入。
5、输出(output):有一个或多个输出。
一个算法的好坏可由以下目标来判断:
正确性(correctness)
可读性(readability)
健壮性(robustness)
高效性(high efficiency)
算法效率的度量:
时间复杂度(time complexity)
空间复杂度(space complexity)
时间复杂度(渐进时间复杂度--asymptotic time complexity ):
如果一个问题的大小是 n ,解这一问题的某一算法所需的时间为T(n),它是n的某一函数,则称 T(n)为这一算法的时间复杂度,当 n 逐渐增大时,时间复杂度的极限称为该算法的渐进时间复杂度。
T(n) = O( f(n) )
即 T(n)≤Cf(n) ,C为常数,f(n) 是 T(n) 的一个上界函数,或称 T(n) 的数量级。
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(n^n)
空间复杂度:
算法所需存储空间的量度。
S(n) = O(f(n))