树
度与结点计算
树的度=树内各结点的度的最大值
结点的度=子结点数=结点的边数
总结点数=边数+1
例:已知一棵度为4的树中,其度为0、1、2、3的结点数分别为14、4、3、2,求该树的结点总数n?度为4的结点数?
设度为4的结点数为x,(14+4+3+2)+x = (1*4+2*3+3*2+4*x)+1,得x=2,(14+4+3+2)+2=25
二叉树:
结点数n=n0+n1+n2(ni:度为i的结点数)
非空二叉树,n0=n2+1;
第i层上,至多有2i-1(i>=0)个结点(层结点数)
深度为k,至多有2k-1(k>=1)个结点(总结点数)
满二叉树:深度为k,有2k-1(k>=1)个结点(总结点数)
完全二叉树:总结点数n,深度h
2h-1<=n<2h --> h=floor(log2n)+1
编号为i的结点父编号为floor(i/2)
二叉链表和三叉链表
lChild-data-rChild
lChild-data-parent-rChild
结点数为n,n0=n2+1,得:空链域数=2n0+n1=n1+n2+n3+1=n+1
前中后遍历
-
/ \
+ /
/ \ / \
a * e f
/ \
b -
/ \
c d
前:-+a*b-cd/ef
中:a+b*c-d-e/f
后:abcd-*+ef/-
哈夫曼树
https://blog.csdn.net/qq_29519041/article/details/81428934
线索二叉树
平衡二叉树
平衡二叉树,且树中每个节点的左右子树深度之差(平衡因子BF)的绝对值不大于1
构造:平衡旋转
二叉搜索树/二叉排序树/二叉查找树
最多2个孩子,左子树上所有节点的值<根节点的值<右子树上所有节点的值,左右子树也是二叉排序树。
平均查找长度ASL
B树
B-tree,Balance,B树又称B-树,多路平衡查找树
m阶B树:空树,或m叉树,满足:
1、最多m个子树
2、若根节点不是叶子节点,至少有2个子树
3、除根节点外的所有非终端节点至少有ceil(m/2)个子树
4、非终端节点数据信息(n, A0, K1, A1, K2, A2,..., Kn, An),
Ki为关键字,Ki < Ki+1,Ai为指向子树根节点的指针,指针Ai-1所指子树所有节点关键字均小于Ki,An所指子树所有节点关键字均大于Kn
一棵m阶B-树每个节点最多有m棵子树m-1个关键字,最少有ceil(m/2)棵子树ceil(m/2)-1个关键字
5、所有叶子节点同层,不带信息
插入:节点分裂
删除:节点合并
B+树
参考文章(B/B+树)
https://www.cnblogs.com/nullzx/p/8729425.html
关键字个数=子树个数
所有叶子节点中包含全部关键字信息及指向含关键字记录的指针,且叶子节点按关键字自小而大连接
非终端节点可看成索引,节点中仅含有其子树中最大/最小关键字
图
邻接矩阵 环
邻接表
深度/广度
最小生成树(Prim)
顶点集合,取最小权顶点加入,递归。
拓扑排序
无环。
取入度为零的顶点。在图中删除该顶点和从他出发的边
关键路径
https://blog.csdn.net/fu_jian_ping/article/details/88962697
最短路径(Dijkstra算法)
https://blog.csdn.net/heroacool/article/details/51014824
排序
快排 折半查找 堆排序(最大堆、最小堆)
查找
哈希表
哈希查找/散列查找:存储地址和关键字之间建立对应关系
哈希函数:从关键字空间到存储地址空间的一种映像,addr(ai) = H(ki),ai是表中一元素,addr(ai) 是ai的存储地址,ki是ai的关键字
哈希表:根据哈希函数和某种处理冲突的方法,将一组关键字映像到有限、地址连续的地址集上
处理线性冲突:除留余数法、线性探测再散列
冲突: H(key1) = H(key2) 且 key1不等于key2
哈希函数构造法:
直接定址法:哈希函数为关键字的线性函数
数字分析法
平方取中法
折叠法:移位叠加,间界叠加
除留余数法:设定哈希函数为:H(key) = key MOD p (p≤m),其中,m为表长,p为不大于m的素数或是不含20以下的质因子
随机数法
处理冲突法:
开放地址法:为产生冲突的地址H(key)求得一个地址序列:H0, H1, …, Hs 1≤ s ≤m-1,Hi = ( H(key) + di ) MOD m,其中: i=1, 2, …, s,H(key)为哈希函数,m为哈希表长,di为增量序列,有下列三种取法:
1)线性探测再散列:关键字+C
2)二次探测再散列:关键字+[12, -12, 22, -22, ...]
3)随机探测再散列:m和di没有公因子
再哈希法:构造若干个哈希函数,当发生冲突时,计算下一个哈希地址,直到冲突不再发生
链地址法:将所有哈希地址相同的记录都链接到同一链表中
约瑟夫,单循环链表
c++
栈 字符串 参数作用域 继承派生 链表。。。
1.a++和++a
a++先取值后自增 b = a++; // b = a
++a先自增后取值 b = ++a; // b = a+1
a=a+1
a+=1
2.引用 &
https://www.runoob.com/cplusplus/passing-parameters-by-references.html
https://www.runoob.com/cplusplus/returning-values-by-reference.html
3.指针 *
https://www.runoob.com/cplusplus/cpp-pointers.html
指针和引用
https://blog.csdn.net/hahachenchen789/article/details/83056728
4.继承