1.脑图
2.数据结构
2.1 抽象数据类型
表示法:
(D,S,P)
D:数据对象
S:D上的关系集
P:对D的基本操作集
ADT格式
ADT 抽象数据类型名{
数据对象:<数据对象定义>
数据关系:<数据对象的定义>
基本操作:<基本操作的定义>
}ADT 抽象数据类型名
基本操作的格式:
基本操作名(参数表)
初始条件:<初始条件描述>
操作结构:<操作结果描述>
2.2 分类
2.2.1 按值的不同特性
原子类型的值是不能分解的,如C中基本数据类型
结构类型的值是可分解的,是由结构类型和原子类型聚合成的
而结构类型中按照值的成分是不是可变又分成:固定聚合类型&可变聚合类型
固定聚合类型如复数,它是由<a,b>两个实数组成
可变聚合类型如字符串,它是由n个char类型字符组成
2.2.2 按数据元素之间表示
顺序映像就如同数组,是一块连续的空间,由头指针和尾指针就可以指定这段空间
非顺序映像如同链表,是n块不连续空间,每块空间有一个指针指向下一个空间(也有双向指针)
2.2.3 按前驱后继分类
首先,我们看看什么是前驱后继
前驱:某数据元素在此数据类型中的上一个数据元素
后继:某数据元素在此数据类型中的下一个数据元素
如果一个数据类型中所有数据元素没有前驱也没有后继,那么每个元素之间就没没有关联,这种结构称之为集合;
如果每个元素都有一个前驱和一个后继(其实这么说不对,因为第一个元素没有前驱,最后一个元素没有后继),那么他们就形成了一个线性的结构,称之为线性表
再如果每个元素都有一个前驱,但是有多个后继(这么说也不对,因为第一个元素是没有前驱,而叶子节点是没有后继),那么他们就成了一个树
最后,n个前驱n个后继的话,就形成了图。
我们的数据结构主要就是以前驱后继的形式去分类学习的,再辅以顺序映像和非顺序映像的表示就衍生了更多的数据结构,这个接下来会逐步讲述。
3.算法
3.1 什么是算法?
算法是对特定问题求解的步骤的描述,是指令的有限序列。
3.2 算法的5个重要特征
[1] 有穷性
两点含义:
(1) 算法必须是在有穷步后结束,如无限循环就不是有穷的。
(2) 每步算法必须是在有穷时间内完成
[2] 确定性
两点含义:
(1) 每一条指令都不能有二义性
(2) 相同的输入只能有相同的输出
[3] 可行性
算法中描述的操作都能通过有限次基本运算实现
[4] 输入
一个算法有0个以上输入
[5] 输出
一个算法有1个以上输出
3.3 算法设计的要求:
[1] 正确性
四个层次:
a.不含语法错误
b.对于几组输入的输出正确
c.程序对于精心选择的输入能得出正确的输出
d.程序对于一切合法输入都有正确的输出
[2] 可读性
算法代码可被人阅读
[3] 健壮性
代码在面对异常时处理
[4] 效率与低储存量需求
算法的时间和空间代价
3.4 算法复杂度
算法的效率从耗费的时间和空间上划分:
[1] 时间复杂度
时间复杂度一般使用大O表示法,它表示算法的时间效率的下限,按照函数增长趋势又分为常量阶、线性阶、平方阶、对数阶、指数阶(算法的效率逐渐降低,复杂度逐渐升高)。
[2] 空间复杂度
指的是算法运行期间占用的内存大小,一般也用大O表示法表示最差情况。
[考研系列之数据结构]数据结构概述