这是第三遍系统的回顾《数据结构》了,希望能把学习的感受记录下来,方便后续深入学习。
第一章 绪论
1.1 数据结构三要素
首先,从数据结构的三要素说起,如下图所示:
(一)逻辑结构:
逻辑结构是指元素之间的逻辑关系,与数据的存储无关,是独立与计算机的。分为线性结构和非线性结构。
线性结构:元素之间1对1关系
树形结构:元素之间1对多关系
图结构:元素之间多对多关系
至于具体的分类后面再详细讨论。
(二)存储结构
又称物理结构,是逻辑结构的计算机语言实现。
(1)顺序存储:逻辑相邻的元素物理上也相邻。
优点:实现随机存取,每个元素占用最少的存储空间
缺点:只能使用相邻的一整块存储单元,可能产生较多外部碎片。
(2)链接存储:不要求逻辑相邻的元素物理也相邻,借助指针表示元素之间的逻辑关系。
优点:没有碎片。
缺点:指针占用额外空间,只能顺序存取。
(3)索引存储:存储信息的同时,建立索引表,索引表中的每一项(关键字,地址)称为索引项。
优点:检索快。
缺点:增加了索引表,占用了较多空间;在增删的时候需要修改索引表,花费较多时间。
(4)散列存储:根据关键字计算出存储地址,又称为Hash存储。
优点:检索、增删很快。
缺点:如果散列函数不好,则可能出现冲突,解决冲突又增加时间和空间开销。
错题精选
1.以下与数据的存储结构无关的术语是(D)
A.循环队列 B.链表 C.哈希表 D.栈
栈是抽象的数据类型,表示逻辑,物理上用顺序或链式实现均可。
2.链式存储设计时,结点内的存储单元地址(A)
A.一定连续 B.一定不连续 C.不一定连续 D.部分连续,部分不连续
链式存储设计时,各个不同结点的存储空间可以不连续,但结点内的存储单元地址必须连续。
1.2 算法和评价
(1)算法的五个特性:有穷性、确定性、可行性、输入、输出
(2)“好”的算法目标:正确性、可读性、健壮性、效率与低存储量需求
1.2.1 算法效率的度量
(1)时间复杂度
频度:语句在算法中被重复执行的次数。
算法中所有语句的频度之和记为T(n),是问题规模n的函数,时间复杂度主要是分析T(n)的数量级。
算法中的基本运算(最深层循环的语句)的频度与T(n)同级,所以通常采用算法中基本运算的频度f(n)来分析算法的时间复杂度,记为:
T(n)=O(f(n))
最坏时间复杂度:最坏情况下,算法的时间复杂度。
平均时间复杂度:所有可能输入实例在等概率出现的情况下,算法的期望运行时间。
最好时间复杂度:最好情况下,算法的时间复杂度。
一般考虑最坏时间复杂度,保证算法的时间不会比它还长。
分析时间复杂度时,两条规则:
(1)加法规则:T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))
(2)乘法规则:T(n)=T1(n)*T2(n)=O(f(n))*O(g(n))=O(f(n)*g(n))
常见的渐进时间复杂度:
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
(2)空间复杂度:算法耗费的存储空间。
参考文献:
[1] 王道论坛, 数据结构联考复习指导2017