数据结构学习
文章平均质量分 52
qing_ti_xx
千里之行始于足下
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
第八章 排序 三、希尔排序
2、取一个差值作为子表的划分的条件,希尔本人建议d=n/2,在本例题中表示为d=8/2=4。6、再次缩小d的值,此时d为1,将整个表整合,并进行插入排序,得到最后结果。先追求表中元素部分有序,在逐渐逼近表中元素全部有序。4、将d除以2,得到新的间距,并得到新的子表。于是,我们将相距为4的元素分配到一个子表。3、分别对它们进行插入排序。1、我们要升序排列此表。5、再次进行插入排序。原创 2023-10-05 16:39:26 · 173 阅读 · 0 评论 -
第八章 排序 十四、最佳归并树
最佳归并树是指将若干个有序序列合并成一个有序序列的一种方式,使得所有合并操作的总代价最小的一棵二叉树。其中,代价通常指合并两个有序序列的操作次数或比较次数。最佳归并树也被称为哈夫曼树。原创 2023-10-08 22:12:04 · 1143 阅读 · 0 评论 -
第八章 排序 十三、置换-选择排序
置换-选择排序是一种排序算法,它通过在未排序的元素中选择最小的元素并将其放置在已排序的部分的末尾来逐步将列表排序。该算法的时间复杂度为O(n^2),其中n是待排序元素的数量。原创 2023-10-08 21:00:16 · 1989 阅读 · 0 评论 -
第八章 排序 十二、败者树
最多。原创 2023-10-08 20:03:49 · 354 阅读 · 0 评论 -
第八章 排序 十一、外部排序
外部排序是一种用于处理大量数据的排序算法,由于数据量太大无法全部载入内存,所以需要将数据分批读取到内存中进行排序,这个过程称为“外部排序”。外部排序通常使用两个或多个磁盘文件进行排序,其中一个文件是输入文件,另一个或多个文件是输出文件。外部排序使用归并排序或快速排序等算法对数据进行排序,并将排序结果写入磁盘文件。外部排序常用于处理大型数据库、搜索引擎索引、大型文件的排序等场景。原创 2023-10-08 17:16:01 · 264 阅读 · 0 评论 -
第八章 排序 十、基数排序
基数排序(Radix Sort)是一种非比较排序算法,它将待排序元素按照其数值的各位数字(或字母)来排序。该算法的基本思想是将整数按照位数切分成不同的数字,然后根据每个位数上的数字进行排序。与其他排序算法相比,基数排序的时间复杂度为 O(d*n),其中 d 表示位数,n 表示待排序元素个数。在实际应用中,基数排序通常采用桶排序来实现,因此它也被称为桶排序的一种扩展,并且通常被用来对整数排序,而不是字符串等其他类型的数据。原创 2023-10-08 16:02:57 · 214 阅读 · 0 评论 -
第八章 排序 九、归并排序
把两个或多个有序的序列合并成一个有序序列。原创 2023-10-08 15:33:56 · 139 阅读 · 0 评论 -
第八章 排序 八、堆的插入与删除
1、删除元素13,将堆底元素填充到空处2、为满足小根堆的特性,要让46不断下坠原创 2023-10-08 15:09:06 · 131 阅读 · 0 评论 -
第八章 排序 七、堆排序
void HeadAdjust(int a[],int k,int len){//k是分支结点的边界//将分支结点存在下标为0的地方i原创 2023-10-08 14:53:56 · 1071 阅读 · 0 评论 -
第八章 排序 六、简单选择排序
目录一、算法思想二、例子1、我们有以下序列要排序2、首先从左往右扫描,在其中找到最小的一个数,让它与第一个数互换位置3、此次扫描完成后,我们取新的子序列,并再次从左往右扫描,在其中找到最小的一个数,让它与第一个数互换位置。4、再次重复操作5、此时有两个相同的元素49,我们优先选择前面的49,因为它先被扫描到6、重复操作三、代码实现四、验证五、算法性能分析1、空间复杂度和时间复杂度2、稳定性六、总结每一趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列。互换前互换后互换前互换后互换前互换后互换前互换原创 2023-10-06 14:58:11 · 158 阅读 · 0 评论 -
第八章 排序 五、快速排序
首先,选取一个数作为序列的基准数,分别定义序列的第一个数和最后一个数为low和high,让它们与基准数进行比较,如果low小于基准数,则low指针右移,反之将low指针所指元素移动到high指针所指的地方,high指针同理,以形成左边的序列都比基准数小,右边的序列都比基准数大。4、此时high指针为空,我们切换到low指针进行比较,让27与49比较,发现它小于49,所以low指针右移,38同理,当移动到65时,发现65大于49,所以将65放在high指针处。、2、选取49作为基准数,并将其存入缓存变量。原创 2023-10-06 13:55:57 · 200 阅读 · 0 评论 -
第八章 排序 四、冒泡排序
10、第一轮对比我们把序列中最小的值放到了最前面,所以下一次循环就不用再对比13了,最终模仿上面进行5轮交换后,得到最终的升序序列。2、我们从后往前依次对比,比较27和49,发现49大于27,正序,所以不用交换位置。从后往前,两两比较相邻元素的值,若为逆序,则交换它们的值,直到全部比较完。3、然后比较13和27,发现27大于13,正序,所以不用交换位置。4、比较13和76,13小于76,交换它们的值。5、比较13和97,13小于97,交换它们的值。8、比较13和49,13小于49,交换它们的值。原创 2023-10-05 20:10:41 · 291 阅读 · 0 评论 -
第八章 排序 二、插入排序
10、最后我们比较49前面的数,由于我们的判定条件是如果此数比49大,则右移,所以这个49只能移动到下标为3的49的前面。6、接着与65进行对比,发现76大于65,于是把76插入97前面。4、接下来查看65前面所有的值,并与65进行对比。每次将一个待排序的记录按其关键字大小插入到前面已排好序的子序列中,直到所有记录插入完成。2、插入排序直接从第二个数开始,我们检查38前的所有数,找到比38大的数,将其右移一位。5、然后是检查76前面的所有值,发现97比76大,于是97右移。3、并将38放入49的前面。原创 2023-10-05 14:29:43 · 168 阅读 · 0 评论 -
第八章 排序 一、排序的基本概念
排序是将一组数据按照一定的规则或条件进行重新排列的过程,使得数据符合我们的要求或者更易于我们的处理。常见的排序规则包括升序(从小到大)和降序(从大到小)。排序的应用非常广泛,比如搜索引擎中的页面排名、统计学中数据的整理和归类、计算机中文件和数据库记录的排序等等。原创 2023-10-05 13:15:46 · 211 阅读 · 0 评论 -
第七章 查找 十、散列查找
哈希表的数据元素的关键字与其存储地址直接相关。总共对比了3个关键字,所以查找长度为3.需要对比一次的关键字为6个;需要对比两次的关键字为4个;需要对比三次的关键字为1个;需要对比四次的关键字为1个;关键字总数为12个;把它们加起来除以总数12,得到ASL;失败的情况一共有13种;第一个关键字失败时,需要比较0次;第二个关键字失败时,需要比较4次;第三个关键字失败时,需要比较0次;第四个关键字失败时,需要比较2次;第五个关键字失败时,需要比较0次;第六个关键字失败时,需要比较0次;第七个关键字失败时,需要比较原创 2023-10-01 16:42:24 · 226 阅读 · 0 评论 -
第七章 查找 九、B+树
1、B+树是一种常用的数据结构,用于实现关系型数据库中的索引。2、其特点是可以在磁盘等外存储器上高效地存储大量数据,并支持快速的查询、插入、删除等操作。3、B+树的结构类似于二叉搜索树,但是每个节点可以存储多个键值对,通常每个节点存储几十个到几千个键值对。4、同时,B+树的每个非叶子节点都包含指向其子节点的指针,使得它在磁盘上的操作是基于块而不是一个个元素。原创 2023-09-29 22:58:42 · 1737 阅读 · 0 评论 -
第七章 查找 八、B树
B树,又称多路平衡查找树,B树中所有结点的孩子个数的最大值称为B树的阶,通常用m表示。一棵m阶B树或为空树,或为满足如下特性的m叉树:1)树中每个结点至多有m棵子树,即至多含有m-1个关键字。2)若根结点不是终端结点,则至少有两棵子树。3)除根结点外的所有非叶结点至少有「m/2]棵子树,即至少含有「m/2]-1个关键字。4)所有的叶结点都出现在同一层次上,并且不带信息(可以视为外部结点或类似于折半查找判定树的查找失败结点,实际上这些结点不存在,指向这些结点的指针为空)。原创 2023-09-29 20:26:09 · 838 阅读 · 0 评论 -
第七章 查找 七、红黑树
平衡二叉树AVL:插入/删除很容易破坏“平衡”特性,需要频繁调整树的形态。如:插入操作导致不平衡,则需要先计算平衡因子,找到最小不平衡子树(时间开销大),再进行LL/RR/LR/RL调整。红黑树RBT:插入/删除很多时候不会破坏“红黑”特性,无需频繁调整树的形态。即便需要调整,一般都可以在常数级时间内完成。原创 2023-10-01 12:00:00 · 253 阅读 · 0 评论 -
第七章 查找 六、平衡二叉树
平衡二叉树是一种特殊的二叉树,具有如下性质:它是一棵空树,或者它的左右两个子树的高度差的绝对值不超过 1,并且其左右两个子树都是平衡二叉树。对于任意节点,它的左右两个子树的高度差都不超过 1。平衡二叉树的主要作用是保持树的平衡,以确保操作的时间复杂度是 O(logn) 级别的。平衡二叉树的常见实现包括 AVL 树和红黑树等。原创 2023-09-21 21:57:13 · 205 阅读 · 0 评论 -
第七章 查找 五、二叉排序树
二叉排序树(Binary Search Tree,BST)是一种特殊的二叉树,它满足以下条件:若左子树不为空,则左子树上所有节点的值(权值)均小于它的根节点的值;若右子树不为空,则右子树上所有节点的值(权值)均大于它的根节点的值;左、右子树本身也分别为二叉排序树。二叉排序树的结构可以在查找、插入、删除操作中发挥重要作用,具有快速查找、插入、删除的特点。原创 2023-09-20 23:21:29 · 768 阅读 · 0 评论 -
第七章 查找 四、分块查找
查找7时,先顺序查找索引表,找到第一个分块,计对比一次,根据索引进入块内,对比第一个数7,计对比了两次。先在索引表内找对应区域,在通过此索引映射到对应区间,进行顺序查找。原创 2023-09-19 23:06:06 · 217 阅读 · 0 评论 -
第七章 查找 三、折半查找(二分查找)
在上图的查找判定树中,因为它的判定条件是mid = 「(low + high)/2]向上取整。所以,右子树结点 - 左子树结点 = 0 或 1;如果包含失败节点的话,树高为h+1;此代码只能用于查找有序的顺序表。原创 2023-09-19 21:06:05 · 251 阅读 · 0 评论 -
第七章 查找 二、顺序查找
有n种可能,第一个就找到,第二个就找到,依此类推,到最后才找到,把每种情况需要对比的次数相加,在除以总数n,得到查找效率。这个代码是从后向前查找,返回该值的下标。原创 2023-09-19 20:31:42 · 132 阅读 · 0 评论 -
第七章 查找 一、查找的基本概念
—数据元素中唯一标识该元素的某个数据项的值,使用基于关键字的查找,查找结果应该是唯一的。——用于查找的数据集合称为查找表,它由同一类型的数据元素(或记录)组成。——在数据集合中寻找满足某种条件的数据元素的过程称为查找。原创 2023-09-17 22:38:18 · 203 阅读 · 0 评论 -
第六章 图 十、关键路径
V6的最早发生时间:前驱为V3,V4,V5,所以ve(6)=max{3+2,2+6,1+6}=8;V4的最早发生时间:前驱为V2和V3,所以ve(4)=max{2+3,4+2}=6;V5的最早发生时间:前驱为V2,所以ve(5)=ve(2)+3=3+3=6;V1的最迟发生时间:min{ 2 - 2 , 4 - 3 } = 0。V3的最早发生时间:前驱为V1,所以ve(3)=0+2=2;V2的最早发生时间:前驱为V1,所以ve(2)=0+3=3;V1的最早发生时间:没有前驱,所以ve(1)=0;原创 2023-09-15 22:35:16 · 572 阅读 · 0 评论 -
第六章 图 九、拓扑排序
第二次遍历,入度为0的点为1和4,将他们加入排序序列0->2->1->4。第三次遍历,入度为0的点为3,将3加入排序序列0->2->1->4->3。第一次遍历,入度为0的点为0和2,将他们加入排序序列0->2。最后的拓扑排序为0->2->1->4->3。删除入度为0的结点。删除出度为0的结点。原创 2023-09-14 23:06:07 · 311 阅读 · 0 评论 -
第六章 图 八、有向无环图的描述表达式
若一个有向图中不存在环,则称为有向无环图,简称DAG图(Directed Acyclic Graph)原创 2023-09-13 23:20:59 · 223 阅读 · 0 评论 -
第六章 图 七、最短路径(BFS算法、Dijkstra算法、Floyd算法)
这个算法是计算所有路径权值为1的图的最短路径。找到有向有权图的最短路径。原创 2023-09-13 23:00:04 · 655 阅读 · 0 评论 -
第六章 图 六、最小生成树(Prim算法、Kruskal算法)
对于一个带权连通无向图G=(V,E),生成树不同,每棵树的权(即树中所有边上的权值之和)也可能不同。设R为G的所有生成树的集合,若T为R中边的权值之和最小的生成树,则T称为G的最小生成树(Minimum-Spanning-Tree, MST)。原创 2023-09-11 22:49:52 · 304 阅读 · 0 评论 -
第六章 图 五、图的深度优先遍历(DFS算法)
1、深度优先遍历(Depth-First Search, DFS)是一种遍历或搜索图的算法。2、该算法从图的某一个起始节点开始,递归地探索该节点的所有邻居节点,直到找出整个图的连通部分。3、DFS使用了栈的数据结构来保存待访问的节点。4、当访问一个节点时,我们将该节点入栈,并将其标记为已访问。然后,如果该节点有未访问的邻居节点,我们就将邻居节点入栈并标记为已访问。这个过程一直持续到栈为空为止。当栈为空时,我们就完成了整个图的深度优先遍历。原创 2023-09-10 20:17:18 · 1678 阅读 · 1 评论 -
第六章 图 四、图的广度优先遍历(BFS算法、广度优先生成树、广度优先生成森林)
a. 取出队列队首节点,并遍历该节点与之相邻的所有未被访问过的节点,并将这些节点标记为已经访问过的节点。10、没有邻接结点了,遍历辅助队列,查看是否还有为遍历结点,发现还有结点9,10,11。2、通过结点7,我们访问了结点3,4,6,8;依此类推,最终得到遍历序列7,3,4,6,8,2,1,5,9,10,11。此时,遍历序列为7,3,4,6,8。此时,遍历序列为7,3,4,6,8,2,1,5。此时,遍历序列为7,3,4,6,8,2,1。6、访问6的邻接结点2;此时,遍历序列为7,3,4,6,8,2。原创 2023-09-10 00:00:31 · 1155 阅读 · 0 评论 -
第六章 图 三、图的存储结构(邻接表、十字链表、邻接多重表)
与树的孩子表示法相似,以顺序表的数据域为头结点,往后存储一个单向链表,链表内的值表示与此结点相邻的结点。以顺序表的数据域为头结点,往后存储一个单向链表,链表内的值表示与由此结点开始,指向的相邻结点。原创 2023-09-07 22:50:57 · 479 阅读 · 0 评论 -
第六章 图 二、图的存储结构(邻接矩阵法)
由此,我们通过观察邻接矩阵表可以知道,A指向B出度加1,C指向A入度加1,D指向A入度加1,结点A的度=入度+出度=2+1=3;如问题一的解答可以找到与顶点相邻的入边和出边个数,找出所有的边需要遍历每一个结点,所以它的时间复杂度为O(n);在无向图中,我们把每两个顶点之间的权值存入邻接表中,只要值不为0或∞,就表示这两者之间有边。(也就是第一行1的个数)邻接矩阵中,值为0表示此值的横纵坐标所对应的两个结点之间没有边,反之则有边。邻接矩阵存储的是结点之间的边,所以结点之间的边越多越好,所以适合存储稠密图。原创 2023-09-07 22:00:09 · 957 阅读 · 1 评论 -
第六章 图 一、图的基本概念以及常见考点
1、图G由顶点集V和边集E组成V。2、用|V|表示图G中顶点的个数,也称为图的阶。3、用|E|表示图G中边的条数。注意:线性表可以是空表,树可以是空树,但图不可以是空,即V一定是非空集当谈论图时,它通常指无向图,它的节点和边没有方向性,例如:节点(顶点):表示图中的对象或实体。边:连接两个节点,表示它们之间的关系。边分为有向边和无向边。有向边有方向,而无向边没有方向。权重:边上的权重可以表示两个节点之间距离、权值、花费等。路径:路径是由一系列节点构成的序列,它们通过边相互连接。原创 2023-09-05 23:22:56 · 631 阅读 · 0 评论 -
第五章 树与二叉树 八、并查集
1.使用互不相交的树,表示多个集合2.要判断两个元素是否属于同一个集合,只需要分别找到它们的根,再判断它们的根节点是否相同。原创 2023-09-03 23:35:44 · 129 阅读 · 0 评论 -
第五章 树于二叉树 七、树和森林的遍历(广度优先遍历、深度优先遍历)
2、对二叉树进行先序遍历,得到也就是森林的先序遍历序列。2、对二叉树进行中序遍历,得到也就是森林的中序遍历序列。1.使用孩子兄弟表示法将其转化为二叉树的形式。1.使用孩子兄弟表示法将其转化为二叉树的形式。2、从根节点开始遍历,A入队,访问A。3、A的孩子结点(B、C、D)入队。1、先把森林转化为与之对应的二叉树。1、先把森林转化为与之对应的二叉树。1、效果和二叉树的层序遍历一致。4、访问B,B的结点E、F入队。5、依此类推遍历完所有的结点。3.得到森林的遍历序列。3.得到森林的遍历序列。原创 2023-09-03 23:08:21 · 720 阅读 · 0 评论 -
第五章 树与二叉树 六、树的存储结构
1.因为B、C、D是兄弟结点,所以要用孩子兄弟表示法把它们全部作为右孩子结点。1.左结点才是它的孩子节点,右结点是它的兄弟结点。1.将森林中各个根节点之间看为兄弟的关系。使用数组存储每个结点。2.左边才是孩子结点。原创 2023-09-03 22:38:17 · 107 阅读 · 0 评论 -
第五章 树与二叉树 五、哈夫曼树(定义与构造方法),哈夫曼编码
我们知道,每个二叉树都可以有多种不同的表示方法,其中,在含有n个带权叶结点的二叉树中,其中带权路径长度(WPL))最小的二叉树称为。原创 2023-08-31 22:18:51 · 470 阅读 · 0 评论 -
第五章 树与二叉树 四、线索树(手算与代码实现)
1.线索树是一种二叉树,它在每个节点上增加了两个指针,分别指向其前驱和后继。2.这些指针称为“线索”,因此线索树也叫做“线索化二叉树”。3.在线索树中,所有的叶子节点都被线索化,使得遍历树的过程可以更加高效地进行。4.同时,线索树可以在O(1)的时间复杂度内找到任意节点的前驱和后继,而不需要遍历整个树。原创 2023-08-31 20:22:32 · 529 阅读 · 0 评论 -
第五章 树与二叉树 三、二叉树的先、中、后序遍历
树的遍历是按照一定的顺序访问树的所有节点,常用的遍历方式有三种:先序遍历、中序遍历和后序遍历。1.求树的深度return 0;} else {//树的深度=Max(左子树深度,右子树深度)+1。原创 2023-08-28 17:56:11 · 183 阅读 · 0 评论
分享