数据项是构成数据元素的不可分割最小单位。
数据结构三要素:逻辑结构、存储结构和数据的运算。
逻辑结构分为线性和非线性
循环队列是顺序表实现的
ADT三元素 数据对象、数据关系、基本操作集
时间和空间都与问题规模有关
算法是对特定问题求解步骤的一种描述
相同复杂度,复杂度小的算法必然时间上优于复杂度大的算法
线性表:元素类型相同,序列,逻辑结构
线性表的顺序存储结构是一种随机存储的存储结构
双链表比单链表多了一个prior指针
静态链表是借助数组来描述线性表的链式存储结构
带头节点的双链表L为空的条件是L->prior==L&&L->next==L
栈和队列具有相同的逻辑结构
不同出栈序列和二叉树数量就是卡特兰数,C(n 2n)/(n+1)
共享栈的好处是节省存储空间,降低发生上溢的可能性。
稀疏矩阵表示法:三元组和十字链表
一个节点的子节点个数是该节点的度
有序树:子树从左到右是有序的,不能交换
树里的路径只有从双亲结点指向孩子节点
树结点数=度和+1
树的路径长度是所有路径长度的总和
总结点数=总分支数+1
N0=N2+1
N个节点的二叉链表含有n+1个空链域
度为2的有序树不是二叉树
线索二叉树的tag是0表示孩子,1表示前驱
M是n的祖先,用后序遍历找到m到n的路径
先序和后序正好相反,那么这棵树只有一个叶节点
线索二叉树是一种物理结构
不是每个节点通过线索都考研直接找到它的前驱和后继
后序线索二叉树不能有效解决求后序后继的问题
后序线索树的遍历需要栈的支持
高度为h的满二叉树对应的森林所含的树的个数一定是h
含有20个节点的平衡二叉树的最大深度为6
线性表和树都可以是空,图至少有一个顶点
简单图不存在重复边,不存在顶点到自身的边
多重图和简单图相对
连通分量是极大连通子图
生成树是极小连通子图
路径的定义 由顶点和相邻顶点序偶构成的边所形成的序列
若有向图存在拓扑序列,则该图不存在回路
任意两点都存在边是完全图
十字链表 有向图
领接多重表 无向图
有向图的领接矩阵对角线以下为0,该图的拓扑序列必定存在
A^n里位于i行j列的元素值k代表i到j有k条路径为n
BFS 空间复杂度 O(V),
时间复杂度 O(V+E) ,领接矩阵O(V2)
BFS寻找最短路径要求每条路径长度相等
DFS同BFS
DFS可以判断图中是否有环
DFS遍历无环有向图,退出递归时输出相应顶点,得到逆拓扑排序
图中各边权值不等时,最小生成树唯一
Prim时间复杂度O(V2),Kruskal时间复杂度O(ElogE)
Floyd允许带负权值的边,但不允许负边的回路
Dijistra和Floyd
拓扑排序时间复杂度O(V+E)
关键路径是最大路径长度
所有权值最小的边不一定出现在所有的最小生成树中
Floyd算法中,path k-1 不一定是path k 的子集
如果有向图不能写出拓扑序列,那么该有向图存在含有顶点数目大于1的强连通分量
a->b a是弧的尾
对角线以上均为1,以下均为0,拓扑排序唯一
破圈法是对的
求割点就是先把这个点移除,然后DFS剩下的图连通性。
分块查找,块内无序,块之间有序,第一块中的最大关键字小于第二块中的所有关键字。索引表按关键字有序排列。分块查找s=sqrt(n)时,ASL最小,sqrt(n)+1
如果才用折半查找,ASL=log(b+1)+(s+1)/2
折半查找和二叉排序树时间性能有时不同
分块查找最理想块长Sqrt(n)
M阶B树
每个节点最多有m棵子树
若根节点不是终端节点,至少有两颗子树
叶节点在同一层次且不带信息。
B树就是平衡因子为0的多路查找树
N个节点的B树,叶节点(查找不成功)的节点为n+1
只有分裂传到根节点,才会导致B树高度+1
插入分裂,删除兄弟够借不够借
B+树子树和关键字个数相等,叶节点包含信息,既可以顺序查找又可以多路查找。B+树查找不管成功与否,都是一条从根节点到叶结点的路径。
B和B+树都可以用作文件索引结构,都可以随机查找
平方探测法是+1,-1,+4,-4,+9,-9
ASL依赖于装填因子,装填因子大,冲突多
散列查找是顺序和链式结合
拉链法不会产生聚集
开放定址法发生聚集的原因主要是解决冲突的方法选择不当。
受堆积现象直接影响的是ASL
Next数组求解
Kmp匹配i++,j++,失配时,i不变,j=next[j]