距离研究生考试满打满算还有3天时间,实话实说专业课还没开始复习。好在只考一门,突击一下。
由于之前学过几遍,本次整理只重点整理命题点及做题易错点。
绪论
1、数据元素是数据的基本单位
2、数据项是数据元素的最小单位
3、数据对象 是具有相同性质的数据元素的集合
一、线性表
1、注意头插法:可以使输入顺序与成链顺序相反;如果没有头节点则需要不断修改头指针
2、链表删除p:可以删除p->next,然后交换值
3、链表在p之前插入元素,可以插入在p之后,然后交换值
4、关于链表判断空:
单链表:有头节点:head->next = = NULL 没有头节点: head = = NULL
循环单链表:head->nexthead
循环双链表:L->nextL && L->prior== L
二、栈与队列
1、卡特兰数:N个元素进栈不同的出栈顺序为
1
n
+
1
C
n
/
2
n
{{1}\over{n+1}} Cn/2n
n+11Cn/2n
2、循环队列:front 指向队头元素,rear指向队尾元素 rear的序号比front的要大
//判空
Q.front== Q.rear;
//判满
(Q.rear+1)%MaxSize==Q.front;
//入队
//先判满
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%MaxSize;
//出队
//先判空
x=Q.data[front];
Q.front=(Q.front+1)%MaxSize;
3、链表队列(单链表实现,带头尾节点,头删尾插):如果没有头节点需要特别注意插入删除跟空队列的关系。(删除最后一个元素后,需要特判将头尾指针全部值为NULL;插入第一个元素,需要将头尾指针全部指向第一个元素)
4、处理表达式求值时,左括号看作最高优先级,右括号看作最低优先级。在优先关系中除了大于小于还要设置等于关系(判断结束 和处理左括号右括号相遇)
5、同一问题的非递归算法比递归算法效率更高
6、三对角矩阵:k=2i+j-3; i=((k+1)/3+1)下取整
三、串
1、子串定位函数:原串a[i],子串b[j]。出现匹配不成功后:i=i-j+2
2、KMP的next数组手算:先算部分匹配值,然后右移,最后加一
3、KMP算法及改进
四、树与二叉树
1、树的路径长度是指所有路径长度之和
2、二叉树性质:
n
0
n_0
n0=
n
2
n_2
n2+1. (推导
n
0
n_0
n0+
n
1
n_1
n1+
n
2
n_2
n2=
n
1
n_1
n1+2
n
2
n_2
n2+1)
3、中序遍历+X序遍历即可唯一确定二叉树
4、n个节点的线索二叉树,2n个域,n-1个指针,n+1条线索
5、线索化后,后序线索二叉树依然不能很好解决寻找后序后继问题
6、树林转换成二叉树之后,右指针域空的个数,只与原树中非终端节点个数n有关,为n+1
7、
n
h
n_h
nh表示深度为h的平衡树的最少含有节点数(或称所有非叶子结点平衡因子均为1),
n
0
n_0
n0=0,
n
1
n_1
n1=1,
n
2
n_2
n2=2,且
n
h
n_h
nh=
n
h
−
1
n_{h-1}
nh−1+
n
h
−
2
+
1
n_{h-2}+1
nh−2+1
8、平衡树中,最小元素不一定是叶节点,最后插入元素也不一定是叶节点。
五、图
1、无向图中,连通分量就是极大连通子图
六、查找
1、顺序查找查找成功ASL:
n
+
1
2
{{n+1}\over{2}}
2n+1 ,查找不成功ASL:n+1
2、有序顺序查找 成功ASL:
n
+
1
2
{{n+1}\over{2}}
2n+1,查找不成功ASL:
n
2
+
n
n
+
1
{{n}\over{2}}+{{n}\over{n+1}}
2n+n+1n
3、折半查找生成树一定是棵平衡二叉树
4、分块最理想块长为
n
\sqrt{n}
n
5、B树: n阶B树,是指每个节点最多有n个子树,所以最多有n-1个关键值
根节点至少一个关键值(两颗子树),其他节点至少
⌈
m
/
2
⌉
\lceil m/2 \rceil
⌈m/2⌉ 颗子树,至少
⌈
m
/
2
⌉
−
1
\lceil m/2 \rceil -1
⌈m/2⌉−1 个关键值
6、推算B树的高度: 最多:用每个节点都塞满:n<=
(
m
−
1
)
(
1
+
m
+
m
2
+
.
.
.
+
m
h
−
1
)
(m-1)(1+m+m^{2}+...+m^{h-1})
(m−1)(1+m+m2+...+mh−1)
最少:用第h+1层的节点数=最关键字个数+1来算:第一层1个节点,第二层2个,第h+1层:
2
⌈
m
/
2
⌉
h
−
1
2\lceil m/2 \rceil^{h-1}
2⌈m/2⌉h−1
7、B树插入导致节点>m-1需要分裂时,需要上升的节点是
⌈
m
/
2
⌉
\lceil m/2 \rceil
⌈m/2⌉位置的节点。
8、B树的计算一定要把握住内部节点个数为n, 外部节点个数为n+1
9、散列表的成功查找平均长度与表长无关,与装填因子
α
\alpha
α有关
七、排序
1、插入排序 :最坏O(n2),稳定,可以搭配二分法找插入位置(还是O(n2)),
希尔排序:最坏O(n2),不稳定,只能适用于顺序表
冒泡排序:最坏O(n2),稳定,可以加一个tar及时结束
快速排序:最好O(nlogn),最坏(本来有序) O(n2),不稳定
简单选择排序:跟初始状态没有关系,一定是O(n2),不稳定
堆排序:建堆复杂度O(n),排序 O(nlogn),不稳定
二路归并排序:O(nlogn),稳定
基数排序:O(d*(n+r)) :d个部分,每部分可能有r个取值,比如三位数,d=3,r=10,稳定