- 队列用链表存储时,删除元素从表头删除,通常仅需修改头指针,但若队列中仅有一个元素,则尾指针也需要修改,当仅有一个元素时,删除后队列为空,需修改尾指针为rear=front
- 后缀表达式每个计算符均直接位于两个操作数的后面。
- 调用函数时,系统会为调用构造一个由参数表和返回地址组成的活动记录,并将记录压入系统提供的栈中,若被调用者有局部变量也要压入栈中。
- KMP中模式向后滑动位数的计算仅与模式本身的结构有关,与主串无关。
- 树的路径长度是指树根到每个节点的路径长度的总和,根到每个节点的路径长度的最大值是树的高度减1。(注意与哈弗曼树的带权路径区别)
- 二叉树:在含有n个节点的二叉链表中,含有n+1个空链域。
- 要使二叉树在第n层达到最多的节点个数,其上面n-1层必须是一个满二叉树。
- 非空树的先序序列与后序序列相反,即“根左右”与“左右根”顺序相反,因此树只有根节点,或者根节点只有左子树和右子树。以此类推其子树有相同的性质。因此树中所有非叶节点的度均为1,即二叉树仅有一个叶节点。
- 二叉树是一种逻辑结构而线索二叉树明确指明了在存储过程中的数据存放方式,就是物理结构=存储结构。注:既指明了存储结构,又指明了逻辑结构的情况就是单独的物理结构。
- 二叉树在线索化后,仍不能有效求解:后序线索二叉树中求后序后继。
- 如果是普通的二叉树。不管是递归算法(隐含递归栈)还是非递归算法(使用栈)都需要栈的支持,但前中序不需要是因为线索二叉树的支持。注:先中都可以通过指针找到孩子,而后序回不去,其指针都指向了左右孩子
- 对于n个不同元素进栈其出栈序列的个数
- 利用二叉链表存储森林时,根节点的右指针不一定为空,即不一定存在第二棵树。注:二叉链表中的根节点就是森林中的第一棵树的根节点,其右指针就是第二棵树(如果存在)的根节点
- 二叉排序树:不同的关键字序列得到同款二叉排序树也可能是不同款二叉排序树。
- 哈夫曼编码是一种被广泛应用而且非常有效的数据压缩编码。
- 哈弗曼树为带权路径长度最小的二叉树,但不一定是完全二叉树。
- 平衡二叉树和二叉排序树没有关系,他们的定义不同。但有序平衡二叉树的设计是为改进二叉排序树的性能,所以它的插入和删除按排序树来。
- 图中有关路径的定义:由定点和相邻顶点序偶构成的边所形成的序列。
- 图与树的区别是逻辑上的区别,而不是边数的区别。
- 极大连通子图是无向图的连通分量,极大即要求包含该连通子图包含其所有的边。如果图本来就不是连通的,那么每个子部分若包含其所有的边。如果图本身就不是连通的,那么每个部分若包含其他本身的所有顶点和边,则它就是极大连通图。
- 极小连通子图既要保持图连通,又要使得边数最小的子图。
- 设图G的邻接矩阵为A,的元素[i][j]等于由顶点i到顶点j的长度为n的路径的数目。
- 十字链表是有向图的一种链式存储结构。
- 邻接多重表是无向图的一种链式存储结构。注:若邻接矩阵对角线一下(或以上)的元素为0,则图中必然不存在环,即拓扑序列一定存在,但这并不能说明拓扑序列唯一
- 无向图采用邻接表表示时,每条边存储两次,所以其边表节点的个数为偶数,题中边表节点为奇数个。故必然是有向图且有奇数条边。
- 一给定图的邻接矩阵存储是唯一的,故其广度优先生成树也是唯一的;但邻接表存储表示不唯一,故其广度优先生成树也是不唯一的。
- 对于同一个图,基于邻接矩阵的遍历所得的DFS序列和BFS序列是唯一的,基于邻接表的遍历所得的DFS和BFS不唯一。
- 判断有向图是否存在回路,除可以利用拓扑排序外还可以用DFS,BFS不行。
- 对于一个无环有向图做DFS在退出递归过程中输出的应该是逆拓扑有序序列。
- Prim算法的时间复杂度为,不依赖与,因此它适合求解边稠密的最小生成树。
- 通常在Kruskal算法中,采用堆来存放边的集合,因此每次选择最小权值的边只需O()的时间。此外,由于生成树T中的所有边可视为一个等价类,因此每次添加新的边的过程类似切就等价类的过程,由此可以采用并查集的数据结构来描述T,从而构造T的时间复杂O(|E|),因此Krump算法适用于边稀疏顶点较多的图。注:有序表的顺序查找和后面的折半查找的思想是不一样的,且有序表的顺序查找中的线性表可以是链式存储结构
- 折半查找过程所对应的查找树是一棵平衡二叉树也是一棵二叉排序树
- 折半查找算法在查找不成功时和给定值进行关键字的比较次数最多为数的高度即 注:在折半查找判定树中的方形点是虚构的它并不记入比较的次数中
- 二叉排序树的性能与输入的数据有关,最好情况与折半查找的平均查找长度相同,最坏情况即形成单支树,而查找长度O(n)