|
29 | 29 | * **单链表**中每个结点的存储地址是存放在其前趋结点next域中,而开始结点无前趋,故应设头指针head指向开始结点。同时,由于最后一个结点无后继,故结点的指针域为空,即NULL。头插法建表(逆序)、尾插法建表(顺序) |
30 | 30 | * 查找:只能从链表的头指针出发,顺链域next逐个结点往下搜索,直到搜索到第i个结点为止。因此,**链表不是随机存取结构**。 |
31 | 31 | * 插入:先找到表的第i-1的存储位置,然后插入。新结点先连后继,再连前驱。 |
32 | | - * 删除:首先找到a_i-1的存储位置p。然后令p–>next指向a_i的直接后继结点,即把a_i从链上摘下。最后释放结点a_i的空间.r=p->next;p->next=r->next;delete r; |
| 32 | + * 删除:首先找到a<sub>i-1</sub>的存储位置p。然后令p–>next指向a<sub>i</sub>的直接后继结点,即把a<sub>i</sub>从链上摘下。最后释放结点a<sub>i</sub>的空间.r=p->next;p->next=r->next;delete r; |
33 | 33 | * 静态链表:用一维数组来实现线性链表,这种用一维数组表示的线性链表,称为静态链表。静态:体现在表的容量是一定的。(数组的大小);链表:插入与删除同前面所述的动态链表方法相同。 |
34 | 34 | * 静态链表是用数组实现的,是顺序的存储结构,在物理地址上是连续的,而且需要预先分配大小。动态链表是用申请内存函数(C是malloc,C++是new)动态申请内存的,所以在链表的长度上没有限制。动态链表因为是动态申请内存的,所以每个节点的物理地址不连续,要通过指针来顺序访问。静态链表在插入、删除时也是通过修改指针域来实现的,与动态链表没有什么分别 |
35 | 35 | * 循环链表:是一种头尾相接的链表。其特点是无须增加存储量,仅对表的链接方式稍作改变,即可使得表处理更加方便灵活。 |
|
94 | 94 | * 稀疏矩阵在采用压缩存储后将会失去随机存储的功能。因为在这种矩阵中,非零元素的分布是没有规律的,为了压缩存储,就将每一个非零元素的值和它所在的行、列号做为一个结点存放在一起,这样的结点组成的线性表中叫三元组表,它已不是简单的向量,所以无法用下标直接存取矩阵中的元素。 |
95 | 95 |
|
96 | 96 | ### 广义表 |
97 | | -广义表(Lists,又称列表)是线性表的推广。广义表是n(n≥0)个元素a1,a2,a3,…,an的有限序列,其中a_i或者是原子项,或者是一个广义表。若广义表LS(n>=1)非空,则a1是LS的表头,其余元素组成的表(a2,…an)称为LS的表尾。广义表的元素可以是广义表,也可以是原子,广义表的元素也可以为空。 |
| 97 | +广义表(Lists,又称列表)是线性表的推广。广义表是n(n≥0)个元素a1,a2,a3,…,an的有限序列,其中a<sub>i</sub>或者是原子项,或者是一个广义表。若广义表LS(n>=1)非空,则a1是LS的表头,其余元素组成的表(a2,…an)称为LS的表尾。广义表的元素可以是广义表,也可以是原子,广义表的元素也可以为空。 |
98 | 98 |
|
99 | 99 | 例子: |
100 | 100 |
|
|
125 | 125 |
|
126 | 126 | 性质: |
127 | 127 |
|
128 | | -1. 在二叉树的第 i 层上至多有2^(i-1) 个结点。 |
129 | | -2. 深度为 k 的二叉树上至多含 2^(k)-1 个结点(k≥1) |
130 | | -3. 对任何一棵二叉树,若它含有n_0 个叶子结点、n_2 个度为 2 的结点,则必存在关系式:n_0 = n_2+1。 |
131 | | -4. 具有 n 个结点的完全二叉树的深度为⎣log_2 n⎦+1 。 |
| 128 | +1. 在二叉树的第 i 层上至多有2<sup>i-1</sup>个结点。 |
| 129 | +2. 深度为 k 的二叉树上至多含 2<sup>k</sup>-1 个结点(k≥1) |
| 130 | +3. 对任何一棵二叉树,若它含有n<sub>0</sub>个叶子结点、n<sub>2</sub>个度为 2 的结点,则必存在关系式:n<sub>0</sub>= n<sub>2</sub>+1。 |
| 131 | +4. 具有 n 个结点的完全二叉树的深度为⎣log<sub>2</sub> n⎦+1 。 |
132 | 132 | 5. n个结点的二叉树中,完全二叉树具有最小的路径长度。 |
133 | 133 | 6. 如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i(1<=i<=n),有: |
134 | 134 | * 如果i=1,则结点i无双亲,是二叉树的根;如果i>1,则其双亲的编号是 i/2(整除)。 |
|
188 | 188 | 树与转换后的二叉树的关系:转换后的二叉树的先序对应树的先序遍历;转换后的二叉树的中序对应树的后序遍历### 哈弗曼树/霍夫曼树 |
189 | 189 | 一些概念 |
190 | 190 |
|
191 | | -1. 路径:从一个祖先结点到子孙结点之间的分支构成这两个结点间的路径;2. 路径长度:路径上的分支数目称为路径长度;3. 树的路径长度:从根到每个结点的路径长度之和。4. 结点的权:根据应用的需要可以给树的结点赋权值;5. 结点的带权路径长度:从根到该结点的路径长度与该结点权的乘积;6. 树的带权路径长度=树中所有叶子结点的带权路径之和;通常记作 WPL=∑ w<sub>i</sub>×l<sub>i</sub> 7. 哈夫曼树:假设有n个权值(w1 , w2 , … , wn ),构造有n个叶子结点的二叉树,每个叶子结点有一个 wi 作为它的权值。则带权路径长度最小的二叉树称为哈夫曼树。 |
| 191 | +1. 路径:从一个祖先结点到子孙结点之间的分支构成这两个结点间的路径;2. 路径长度:路径上的分支数目称为路径长度;3. 树的路径长度:从根到每个结点的路径长度之和。4. 结点的权:根据应用的需要可以给树的结点赋权值;5. 结点的带权路径长度:从根到该结点的路径长度与该结点权的乘积;6. 树的带权路径长度=树中所有叶子结点的带权路径之和;通常记作 WPL=∑w<sub>i</sub>×l<sub>i</sub> 7. 哈夫曼树:假设有n个权值(w<sub>1</sub>, w<sub>2</sub>, … , w<sub>n</sub>),构造有n个叶子结点的二叉树,每个叶子结点有一个 w<sub>i</sub>作为它的权值。则带权路径长度最小的二叉树称为哈夫曼树。前缀码的定义:在一个字符集中,任何一个字符的编码都不是另一个字符编码的前缀。霍夫曼编码就是前缀码,可用于快速判断霍夫曼编码是否正确。霍夫曼树是满二叉树,若有n个节点,则共有(n+1)/2个码子 |
| 192 | + |
| 193 | +给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为霍夫曼树(Huffman Tree)。霍夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 |
| 194 | + |
| 195 | +假设哈夫曼树是二叉的话,则度为0的结点个数为N,度为2的结点个数为N-1,则结点总数为2N-1。哈夫曼树的结点个数必为奇数。 |
| 196 | + |
| 197 | +哈夫曼树不一定是完全二叉树,但一定是最优二叉树。 |
| 198 | + |
| 199 | +### 图遍历与回溯 |
| 200 | +图搜索->形成搜索树 |
| 201 | + |
| 202 | +1. 穷举法。 |
| 203 | +2. 贪心法。多步决策,每步选择使得构成一个问题的可能解,同时满足目标函数。3. 回溯法。根据题意,选取度量标准,然后将可能的选择方法按度量标准所要求顺序排好,每次处理一个量,得到该意义下的最优解的分解处理。 |
| 204 | + |
| 205 | +## 图 |
| 206 | +无向图 |
| 207 | + |
| 208 | +1. 回路或环:第一个顶点和最后一个顶点相同的路径。 |
| 209 | +2. 简单回路或简单环:除第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路 |
| 210 | +3. 连通:顶点v至v’ 之间有路径存在4. 连通图:无向图图 G 的任意两点之间都是连通的,则称 G 是连通图。5. 连通分量:极大连通子图有向图: |
| 211 | + |
| 212 | +1. 回路或环:第一个顶点和最后一个顶点相同的路径。2. 简单回路或简单环:除第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路。3. 连通:顶点v至v’之间有路径存在4. 强连通图:有向图G的任意两点之间都是连通的,则称G是强连通图。5. 强连通分量:极大连通子图1. 生成树:极小连通子图。包含图的所有n个结点,但只含图的n-1条边。在生成树中添加一条边之后,必定会形成回路或环。 |
| 213 | +2. 完 全 图:有 n(n-1)/2 条边的无向图。其中n是结点个数。3. 有向完全图:有 n(n-1)条边的有向图。其中n是结点个数。 |
| 214 | + |
| 215 | +### 图的存储形式 |
| 216 | +1. 邻接矩阵和加权邻接矩阵 |
| 217 | + * 无权有向图:出度: i行之和;入度: j列之和。 * 无权无向图:i结点的度: i行或i列之和。 |
| 218 | + * 加权邻接矩阵:相连为w,不相连为∞2. 邻接表 |
| 219 | + * 用顶点数组表、边(弧)表表示该有向图或无向图 |
| 220 | + * 顶点数组表:用数组存放所有的顶点。数组大小为图顶点数n |
| 221 | + * 边表(边结点表):每条边用一个结点进行表示。同一个结点的所有的边形成它的边结点单链表。 |
|
0 commit comments