1.数据结构的基本概念
1.1.基本概念和术语
- 数据:数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和外理的符号的集合。数据是计算机程序加工的原料。(整体)
- 数据元素:数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。(元素)
- 数据由数据元素组成,数据元素由数据项组成
- 数据对象:数据对象是具有相同性质的数据元素的集合,是数据的一个子集。
- 数据结构:数据元素相互之间的关系称为结构,数据结构是带结构的数据元素的集合
- 数据类型:一组性质相同的值的集合(例如:C语言中的int型)以及定义于这个值集合上的一组操作(例如:加减乘除取模)的总称。
- 抽象数据类型(Abstract Data Type,ADT):指一个数学模型以及定义在此数学模型上的一组操作。(把一类事物的操作、特点抽象出来)
1.抽象数据类型可以用(D,S,P)三元组表示。其中D(Data)为数据对象,S(Structure)是D上的关系集,P(Program)是对D的基本操作集
2.
//抽象数据类型的定义格式 ADT 抽象数据类型名{ 数据对象:<数据对象的定义> 数据关系:<数据关系的定义> 基本操作:<基本操作的定义> } ADT 抽象数据类型名
3.基本操作有两种参数:
- 赋值参数只为操作提供输入值。
- 引用参数以&打头,除可提供输入值外,还将返回操作结果。
1.2.数据结构的三要素
数据结构:数据元素相互之间的关系称为结构,数据结构是带结构的数据元素的集合
逻辑结构:数据元素之间的逻辑关系,与数据的存储无关。分为:
- 线性结构:有且仅有一个开始和一个终端结点,并所有结点都最多只有一个直接前趋和一个直接后继(线性表)
- 非线性结构:一个结点可能有多个直接前趋和直接后继(树和图)
2.存储结构:存储结构是指数据结构在计算机中的表示(又称映像)。分为
- 顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,数据元素之间的逻辑关系由元素的存储位置表示(前驱和后继的逻辑关系,在存储上用存储位置的先后表示)。其优点是可以实现随机存取;缺点是只能使用相邻的一整块存储单元,因此可能产生较多的外部碎片。(C语言使用数组实现)
- 链式存储:不要求逻辑上相邻的元素在物理位置上也相邻,借助指示元素存储地址的指针来表示元素之间的逻辑关系。其优点是不会出现碎片现象,缺点是每个元素因存储指针而占用额外的存储空间,且只能实现顺序存取。
- 索引存储:在存储元素信息的同时,还建立附加的索引表。优点:检索速度快;缺点:索引表需要额外存储空间
- 散列存储:根据元素的关键字直接计算出该元素的存储地址。 优点:各种操作都很快;缺点:如果函数设置不好,可能会产生存储冲突
1.3.概念小结
2.算法和算法评价
算法是解决问题的一种方法或一个过程
2.1.算法的特性
- 有穷性:有穷步结束,每步有穷时间
- 确定性:相同输入只能得到相同输出
- 可行性
- 输入
- 输出
2.2.算法的设计要求
- 正确性:正确语法、输出正确结果
- 可读性:利于人的理解
- 健壮性:对非法数据能有适当处理
- 效率与低存储量需求
2.3.算法效率的度量
算法效率的度量由时间复杂度和空间复杂度来描述
2.3.1.时间复杂度
- 算法运行时间 = 一个简单操作所需的时间 * 简单操作次数
- 即算法运行时间 = 每条语句运行时间 * 该语句执行一次的时间(假设每条语句执行的时间为单位时间)
- 仅比较算法时间效率的数量级,且仅考虑算法的基本操作
- 若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n))。称O(f(n))为算法的渐进时间复杂度(O是数量级的符号),简称时间复杂度
- 忽略低次幂和最高次幂的系数
- 计算时间复杂度的基本方法
1.找出语句频度最大的那条语句作为基本语句
2.计算基本语句的频度得到问题规模n的某个函数f(n)
3.取其数量级用符号“O”表示
i = 1; while ( i <= n){ i *= 2; };
7.
- 循环1次,i = i * 2 = 2;
- 循环2次, i = i * 2 = 4;
- 循环3次,i = i * 2 = 8……
- 循环n次,i = 2^n
- 设执行次数为x次,由循环条件(i <= n)→2^x <= n → x <= log2 n
8.
2.3.2.空间复杂度
- 算法需要存储空间的数量(包括算法本身和所需要的辅助空间)
- 算法原地工作是指算法所需的辅助空间为常量,即O(1)