Skip to content

Commit bdcc80a

Browse files
数据结构添加内容
1 parent 96031be commit bdcc80a

1 file changed

Lines changed: 37 additions & 7 deletions

File tree

数据结构.md

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
* **单链表**中每个结点的存储地址是存放在其前趋结点next域中,而开始结点无前趋,故应设头指针head指向开始结点。同时,由于最后一个结点无后继,故结点的指针域为空,即NULL。头插法建表(逆序)、尾插法建表(顺序)
3030
* 查找:只能从链表的头指针出发,顺链域next逐个结点往下搜索,直到搜索到第i个结点为止。因此,**链表不是随机存取结构**。
3131
* 插入:先找到表的第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;
3333
* 静态链表:用一维数组来实现线性链表,这种用一维数组表示的线性链表,称为静态链表。静态:体现在表的容量是一定的。(数组的大小);链表:插入与删除同前面所述的动态链表方法相同。
3434
* 静态链表是用数组实现的,是顺序的存储结构,在物理地址上是连续的,而且需要预先分配大小。动态链表是用申请内存函数(C是malloc,C++是new)动态申请内存的,所以在链表的长度上没有限制。动态链表因为是动态申请内存的,所以每个节点的物理地址不连续,要通过指针来顺序访问。静态链表在插入、删除时也是通过修改指针域来实现的,与动态链表没有什么分别
3535
* 循环链表:是一种头尾相接的链表。其特点是无须增加存储量,仅对表的链接方式稍作改变,即可使得表处理更加方便灵活。
@@ -94,7 +94,7 @@
9494
* 稀疏矩阵在采用压缩存储后将会失去随机存储的功能。因为在这种矩阵中,非零元素的分布是没有规律的,为了压缩存储,就将每一个非零元素的值和它所在的行、列号做为一个结点存放在一起,这样的结点组成的线性表中叫三元组表,它已不是简单的向量,所以无法用下标直接存取矩阵中的元素。
9595

9696
### 广义表
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的表尾。广义表的元素可以是广义表,也可以是原子,广义表的元素也可以为空。
9898

9999
例子:
100100

@@ -125,10 +125,10 @@
125125

126126
性质:
127127

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 。
132132
5. n个结点的二叉树中,完全二叉树具有最小的路径长度。
133133
6. 如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i(1<=i<=n),有:
134134
* 如果i=1,则结点i无双亲,是二叉树的根;如果i>1,则其双亲的编号是 i/2(整除)。
@@ -188,4 +188,34 @@
188188
树与转换后的二叉树的关系:转换后的二叉树的先序对应树的先序遍历;转换后的二叉树的中序对应树的后序遍历### 哈弗曼树/霍夫曼树
189189
一些概念
190190

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

Comments
 (0)