一、 栈和队列
顺序栈空栈条件: `top == -1`(有的教材是`0`,看题头说明,但考题常考`-1`)。
顺序栈满栈条件: `top == MaxSize-1`。
循环队列队空: `front == rear`。
循环队列队满: `(rear+1)%MaxSize == front`。
出栈顺序合法性: 记住——任意位置,后出栈元素之前的同序列元素必须逆序排列。用这个秒杀。
中缀转后缀: 看到运算符比较优先级,栈顶优先级大于等于当前就弹出,否则入栈。左括号入栈,右括号弹出直到左括号。
二、 树和二叉树
二叉树度: 度为0的结点数`n0` = 度为2的结点数`n2` + 1。闭眼写等式。
完全二叉树高度: `h = ⌊log₂n⌋ + 1`。向下取整加一。
前中后序遍历: 选择题给两个序列让你推第三个。技巧:前序/后序定根,中序分左右。画个小图秒解。
哈夫曼树: 只有度为0和2的结点。加权路径长度(WPL)计算,看题是求所有叶子的(权值×路径长度)之和,别加内部节点。
三、 图和查找排序
图的遍历: DFS用栈(递归),BFS用队列。选择题常考遍历得到的序列。
最小生成树: Prim算法从点开始,Kruskal算法从边开始(选最小边且不构成环)。
散列查找: 线性探测冲突时,往后一个个试。失败查找长度是到空位置才算,别忘分母是模数。
排序稳定性口诀: 快选堆希不稳定(快速、选择、堆、希尔排序不稳定),其他都稳。
排序比较次数/趟数:
直接插入:n-1趟。
冒泡:n-1趟。
简单选择:n-1趟。
快速排序:递归层数(趟数)看枢轴。
堆排序:建堆调整。
四、 链表和数组
单链表插入删除: 找准前驱节点。头插法逆序,尾插法正序。
二维数组按行/列存储地址计算: `LOC(i,j) = 基地址 + [(i-起始行号)列数 + (j-起始列号)] 元素大小`。按列就交换行列顺序。
五、 通用蒙题技巧(实在不会时)
1. 看选项长度:数据结构里,复杂操作(如排序、查找)的时间复杂度,O(n²)和O(n log n)经常是正确选项,O(n!)和O(2ⁿ)基本是坑。
2. 矛盾排除:两个选项意思完全相反(比如“稳定”和“不稳定”),答案大概率是其中之一。
3. “一定”“必然”“完全” 这种绝对化词,错的概率高。
4. 考概念定义:选最课本、最死板的那个说法,别想当然。