上午综合部分有内容考,下午也有,而且是最难的题
目录
标色为重点
数组与矩阵
数组
稀疏矩阵
例题
线性表
线性表是线性结构的基本表现
两种数据结构:
- 顺序存储结构:顺序表
- 链式存储结构:链表
链表的基本操作
顺序存储和链式存储对比
队列与栈
广义表
广义表是n个表元素组成的有限序列,是线性表的推广。
通常用递归的形式进行定义,记做:LS=(a0,a1…,an)。
注:其中LS是表名,a是表元素,它可以是表(称做子表),也可以是数据元素(称为原子)。其中n是广义表的长度(也就是最外层包含的元素个数),n=0的广义表为空表;而递归定义的重数就是广义表的深度,直观地说,就是定义中所含括号的重数(原子的深度为0,空表的深度为1),可以从最外层括号嵌套了几重内括号来看。
基本运算:
- 取表头head(Ls)和取表尾tail(Ls)。
- 除了第一个元素是表头以外的都是表尾
例题
若有:LS1=(a,(b,c),(d,e))
head(LS1)=a
tail(LS1)=((b,c),(d,e))
现将其中的b字母取出操作?
共三步:取表尾,取表头,取表头
树与二叉树
二叉树遍历
- 层次遍历
12345678 - 前序:根左右
12457836 - 中序:左根右
42785136 - 后序:左右根
48752631
反向构造二叉树
最后形成的树:
树转换成二叉树
- 兄弟节点就放右子树
- 孩子节点就放左子树
查找二叉树(排序二叉树)
最优二叉树(哈夫曼树)
- 路径乘以权值,只要求叶子,就是带权路径长度
比如左一的就是:22+43+83+11=41
线索二叉树
平衡二叉树
图
图跟树最大的区别是,图有环路,树没有
完全图
- 在无向图中,若每对顶点之间都有一条边相连,则称该图为完全图complete graph)
- 在有向图中,若每对顶点之间都有二条有向边相互连接,则称该图为完全图。
邻接矩阵
邻接表
图的遍历
从邻接表来看:
拓扑排序
图的最小生成树
1.普利姆算法
2.克鲁斯卡尔算法
普里姆是选最近点,克鲁斯卡尔是选最短边
算法基础
算法特性
- 有穷性:执行有穷步之后结束
- 确定性:算法中每一条指令都必须有确切的含义,不能含糊不清,都有确定的唯一的结果
- 输入(〉=0)
- 输出(〉=1)
- 有效性:算法的每个步骤都能有效执行并能得到确定的结果。例如a=0,b/a就无效
算法的复杂度
- 时间复杂度是指程序运行从开始到结束所需要的时间。通常分析时间复杂度的方法是从算法中选取一种对于所研究的问题来说是基本运算的操作以该操作重复执行的次数作为算法的时间度量。一般来说,算法中原操作重复执行的次数是规模n的某个函数T(n)。由于许多情况下要精确计算T(n)是困难的,因此引入了渐进时间复杂度在数量上估计一个算法的执行时间。其定义如下:
如果存在两个常数c和m,对于所有的n,当n≥m时有f(n)≤cg(n),则有f(n)=O(g(n))。也就是说,随着n的增大,f(n)渐进地不大于g(n)。例如,一个程序的实际执行时间为T(n)=3n3+2n2+n,则T(n)=O(n3)。
常见的对算法执行所需时间的度量:
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)
- 空间复杂度是指对一个算法在运行过程中临时占用存储空间大小的度量。一个算法的空间复杂度只考虑在运行过程中为局部变量分配的存储空间的大小.
查找
1.顺序查找
2.二分查找
除2后取整
- 二分查找在查找成功时关键字的比较次数最多为|[1og2n]+1次。
- 二分查找的时间复杂度为O(log2n)
散列表
排序
1.直接插入排序
2.希尔排序(shell)
3.直接选择排序
4.堆排序