数据结构复习资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章绪论
1、数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。
2、数据(Data):所有能输入到计算机中去的描述客观事物的符号。
3、数据元素(Data Element):是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。
4、数据对象(Data Object):是性质相同的数据元素的集合。是数据的一个子集。
5、数据结构(Data Structure):简单地说数据元素之间的“关系”即是结构。数据结构即是数据元素之间相互的关系(简单理解)。
6、一般,数据结构的研究包括三个方面:逻辑结构、物理结构、算法。
7、物理(存储)结构:数据结构在计算机中的存储表示称为数据的存储结构。它包括数据元素的表示和关系的表示。
8、存储结构分为:
顺序存储结构——借助元素在存储器中的相对位置来表示数据元素间的逻辑关系
链式存储结构——借助指示元素存储地址的指针表示数据元素间的逻辑关系
9、逻辑结构通常分为四大类:
集合:数据元素间除“同属于一个集合”外,无其它关系
线性结构:一个对一个,如线性表、栈、队列
树形结构:一个对多个,如树
图状结构:多个对多个,如图
10、算法(algorithm):是对特定问题求解步骤的一种描述,算法是指令的有限序列,其中每一条指令表示一个或多个操作。
算法特性:
1.有穷性:
2.确定性:
3.可行性:
4.输入:
5.输出:
11、算法的评价—衡量算法优劣的标准
正确性(correctness):a,b,c,d四个层次
可读性(readability):方便阅读
健壮性(robustness):可容错
效率与低存储量
算法效率——用依据该算法编制的程序在计算机上执行所消耗的时间来度量。
1.事后统计
2.事前分析估算
12、时间复杂度(Time complexity):算法中基本操作重复执行的次数是问题规模n的某个函数,将算法的时间量度记作
T(n)=O(f(n))
称作算法的渐近时间复杂度简称为时间复杂度。
13、空间复杂度(Space complexity):指算法运行从开始到结束所需的存储量。算法的存储量指的是算法执行过程中所需的最大存储空间。
算法执行期间所需要的存储量应该包括三部分:
(1) 输入数据所占空间;
(2) 程序本身所占空间;
(3) 辅助变量所占空间。
类似于算法的时间复杂度,通常以算法的空间复杂度作为算法所需存储空间的量度,S(n)=O(g(n)) 称S(n)为算法的空间复杂度。
14、六种计算算法时间的多项式是最常用的。其关系为:
O(1) 指数时间的关系为: O(2n) 第二章线性表 1、线性表(Linear list):是由一组具有相同属性的数据元素构成。 特点: 1.存在一个唯一的没有前驱的(头)数据元素; 2.存在一个唯一的没有后继的(尾)数据元素; 3.此外,每一个数据元素均有一个直接前驱和一个直接后继数据元素。 2、线性表:是由n(n≧0)个具有相同属性的数据元素a1,a2,a3,…,an组成的有限序列,其中序列中元素的个数n称为线性表的长度。 当n=0时称为空表,即不含有任何元素。 常常将非空的线性表(n>0)记作: (a1,a2,…an) 3、线性表的逻辑特征是: (a1,a2,…ai-1,ai,ai+1…,an-1,an) 在非空的线性表,有且仅有一个开始结点a1,它没有直接前趋,而仅有一个直接后继a2; 有且仅有一个终端结点an,它没有直接后继,而仅有一个直接前趋an-1; 其余的内部结点ai(2≦i≦n-1)都有且仅有一个直接前趋ai-1和一个直接后继ai+1。 线性表是一种典型的线性结构。 4、线性表的顺序表示:用一组地址连续的存储单元依次存储线性表的数据元素。 假设线性表的每个元素需占用C个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储位置。则线性表中第i+1个数据元素的存储位置LOC(ai+1)和第i个数据元素的存储位置LOC(ai)之间满足下列关系: LOC(ai+1)=LOC(ai)+C 线性表的第i个数据元素ai的存储位置为: LOC(ai)=LOC(a1)+(i-1)×C 5、顺序表特点是:用元素在计算机内存中“物理位置相邻”来表示线性表之间的逻辑关系。顺序表特性:随机存取。只要确定了线性表的起始位置以及元素在线性表中的逻辑顺序便可计算出元素的地址,所以能够实现随机存取数据。 高级程序设计语言中的数组类型也具有随机存取的特性,因此顺序表常用数组来实现。 6、(1)插入一个元素。 在表的第i(1≦i≦n+1)个位置上,插入一个新结点x,使长度为n的线性表 (a1,…ai-1,ai,…,an) 变成长度为n+1的线性表 (a1,…ai-1,x,ai,…,an) 元素ai-1和ai之间的逻辑关系也发生了变化。 算法时间复杂度的分析。 该算法的时间主要花费在移动数据元素上,移动个数取决于插入位置i和表的长度n。所以可以用数据元素的移动操作来估计算法的时间复杂度。在第i个位置上插入x ,共需要移动n-i+1个元素,i 的取值范围为:1≤i≤n+1,即有n+1个位置可以插入。 当i=n+1时,不需要移动结点;当i=1时需要移动n个结点。由此可以看出,算法在最好的情况下时间复杂性为O(1),最坏的时间复杂性是O(n)。 由于插入可能在表中任何位置上进行,因此需分析算法的平均复杂度. 由于插入的位置是随机的,因此,需要分析执行该算法移动数据元素的平均值。设在第i个位置上作插入的概率为Pi,则平均移动数据元素的次数: 假设表中任何位置插入概率是均等的,即Pi=1/ (n+1) ,则: 所以顺序表插入算法时间复杂度为:O(n) (2)删除一个元素。 线性表的删除运算是指将表的第i(1≦i≦n)结点删除,使长度为n的线性表:(a1,…a i-1,ai,a i+1…,an) 变成长度为n-1的线性表 (a1,…a i-1,a i+1,…,an) 算法时间复杂度的分析。 与插入运算相同,删除运算的时间也主要消耗在移动表中数据元素上,删除第i个元素时,其后面的元素ai+1-an 都要向前移动一个位置,共移动了n-i 个元素,所以在等概率的情况下,在线性表中删除数据元素所需移动数据元素的期望值,即平均移动数据元素的次数为: