数据结构(C语言版|第2版)
第1章
1.有关概念
数据:客观事物的符号表示。
数据元素:数据的基本单位。
数据项:组成数据元素的、有独立含义的、不可分割的最小单位。
数据对象:性质相同的数据元素的集合,数据的一个子集。
数据结构:相互间存在一种或多种特定关系的数据元素的集合。分为逻辑结构和存储结构。
逻辑结构:由数据元素和关系组成。有4类基本结构(集合结构,线性结构,树结构,图结构)。
存储结构(物理结构):顺序存储结构(类似数组),链式存储结构(类似指针)。
数据类型:一个值的集合和定义在这个值集上的一组操作的总称。
抽象数据类型:包括数据对象、数据对象上关系的集合以及对数据对象的基本操作的集合。
2.算法
算法:有穷性、确定性、可行性、输入、输出。评价算法忧劣的基本标准:正确性、可读性、健壮性、高效性(时间<时间复杂度>和空间<空间复杂度>)。
(1)算法的时间复杂度
○问题规模和语句频度
○算法的时间复杂度定义:算法中的"基本语句"的执行次数T(n)=O(f(n))。
○算法的时间复杂度分析:语句频度最大的那条语句作为基本语句。
①常量阶:T(n)=O(1) ←与问题规模n无关的常数
②k次方阶:T(n)=O(n^k) ←由最深层循环内的基本语句的频度f(n)决定
③对数阶:T(n)=O(log2n) ←for循环中有乘法运算,如for(i=1;i<=n;i*2){x++;s=0;}
④线性对数阶:T(n)=O(nlog2n)
⑤指数阶:T(n)=O(2ⁿ)
→在实际中,应尽可能选择使用多项式阶O(n^k)的算法,避免使用指数阶的算法。人们大多关心最坏和平均时间复杂度。一般情况下只讨论最坏时间复杂度。
(2)算法的空间复杂度
空间复杂度和时间复杂度一般不能同时兼顾,即空间复杂度好,那么时间复杂度便会相对较差。