
数据结构
文章平均质量分 64
小瑾比个耶
趁月色告白
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
插入排序(Insertion Sort)
插入排序是一种简单直观的排序算法,其基本思想是将未排序的元素逐个插入到已排序的序列中,直到所有元素有序。具体步骤包括:1. 将数组的第一个元素视为已排序序列;2. 从第二个元素开始,依次与已排序序列中的元素从后向前比较;3. 若当前元素较小,则将已排序元素向后移动,直到找到合适位置插入;4. 重复上述步骤,直到整个数组有序。插入排序的时间复杂度在最好情况下为O(n),最坏和平均情况下为O(n²),空间复杂度为O(1),且是稳定的排序算法。原创 2025-05-22 09:59:07 · 306 阅读 · 0 评论 -
堆排序(Heap Sort)
堆是一种完全二叉树,分为最大堆和最小堆。最大堆中每个节点的值大于或等于其子节点,最小堆则相反。堆通常用数组实现,父子节点的索引关系可通过公式计算。堆排序的步骤包括构建初始堆和排序过程。构建初始堆时,从最后一个非叶子节点开始,向前遍历并执行堆化操作,确保子树满足堆的性质。排序过程中,交换堆顶与末尾元素,缩小堆范围并重新堆化,直到堆中只剩一个元素。堆排序的时间复杂度为O(n log n),空间复杂度为O(1),是一种不稳定的排序算法。原创 2025-05-22 09:48:48 · 415 阅读 · 0 评论 -
希尔排序(Shell Sort)
希尔排序是一种改进的插入排序算法,其核心思想是通过将原始列表分割成多个子序列,先使这些子序列基本有序,然后再对全体记录进行直接插入排序。与普通插入排序相比,希尔排序的改进在于其对基本有序的数组效率更高,且每次移动的步长更大,从而提高了排序效率。原创 2025-05-20 09:47:07 · 616 阅读 · 0 评论 -
快速排序(Quick Sort)
快速排序是一种高效的分治算法,其核心思想是通过选择一个基准值将数组分为两部分,左边部分的元素均小于等于基准值,右边部分的元素均大于等于基准值,然后递归地对左右两部分进行排序,直到子数组长度为1或0。关键步骤包括选择基准值、分区操作和递归排序。性能分析显示,快速排序在最优和平均情况下的时间复杂度为O(nlogn),最坏情况下为O(n²),空间复杂度在最优情况下为O(logn),最坏情况下为O(n)。快速排序是一种不稳定的排序算法。原创 2025-05-20 09:34:15 · 864 阅读 · 0 评论 -
查找典型例题
本篇博客通过三个实际例题展示了查找算法的应用。首先,使用快速排序算法解决了“求第k大的数”问题,通过排序后直接输出第k大的元素。其次,通过冒泡排序和遍历查找,解决了“查找三个数组的最小共同元素”问题,确保找到三个数组中共同的最小元素。最后,利用冒泡排序在“查找循环顺序数组的最小元素”问题中,通过排序后输出数组的最小值。每个问题都提供了详细的代码实现和解释,帮助读者理解算法的具体应用。原创 2025-05-19 10:17:46 · 296 阅读 · 0 评论 -
二叉查找树(BST)
二叉查找树(BST)是一种特殊的二叉树,其每个节点的左子树值小于该节点,右子树值大于该节点。BST的基本操作包括查找、插入和删除,其中删除操作较为复杂,需根据节点子节点数量采取不同策略。BST的性能在平衡情况下为O(logn),但在最坏情况下可能退化为O(n)。BST的扩展应用包括AVL树、红黑树、伸展树和Treap等,它们通过不同机制保持树的平衡。原创 2025-05-19 10:07:58 · 1188 阅读 · 0 评论 -
哈希查找详解
哈希查找是一种基于哈希表的高效查找算法,通过哈希函数将键映射到表中的位置,实现快速查找。哈希表通过哈希函数将键映射到特定位置,实现快速数据存取。哈希函数将任意大小的数据映射到固定大小值,需满足计算简单、均匀分布和确定性。原创 2025-05-16 10:05:50 · 613 阅读 · 0 评论 -
二分查找详解
二分查找是一种高效的搜索算法,其核心思想是“分而治之”。通过将数组中间元素与目标值比较,逐步缩小搜索范围,直到找到目标或确定其不存在。二分查找的时间复杂度为O(logn),空间复杂度为O(1)(迭代法)或O(logn)(递归法)。原创 2025-05-16 09:54:59 · 202 阅读 · 0 评论 -
拓扑排序例题
✍️上篇博文已经介绍了拓扑排序的概念,这篇博文我还将分享几条拓扑排序的例题,有忘记的概念可以去看我上一条博文。原创 2025-05-16 09:45:59 · 283 阅读 · 0 评论 -
拓扑排序详解
给定一个有向无环图(DAG),拓扑排序是将图中所有顶点排成一个线性序列,使得对于图中任意一条有向边(u → v),u在序列中总是出现在v的前面。原创 2025-05-16 09:41:11 · 468 阅读 · 0 评论 -
欧拉回路详解
欧拉路径和欧拉回路是图论中的重要概念。欧拉路径是指经过图中每一条边且每一条边只经过一次的路径,而欧拉回路则是起点和终点相同的欧拉路径。原创 2025-05-15 09:37:32 · 545 阅读 · 0 评论 -
有向无环图的判定
第一行包含两个整数N、M,表示该图共有N个结点和M条有向边。(N <= 5000,M <= 200000)【题目描述】给定无权有向图G(V,E),请判断G是否是一个有向无环图(DAG)。接下来M行,每行包含2个整数{u,v},表示有一条有向边(u,v)有环输出“not DAG”,无环输出“DAG”原创 2025-05-15 09:40:00 · 181 阅读 · 0 评论 -
弗洛伊德算法Floyd
对于下面一张若干个城市,以及城市之间距离的地图,请采用弗洛伊德算法求出所有城市之间的最短路径。的动态规划算法,可以计算有向图或负权图(但不能有负权回路)中所有顶点之间的最短路径。1)对于图中的每一对顶点 (i, j),考虑所有可能的中间顶点 k。3)则更新 D[i][j] = D[i][k] + D[k][j]2)如果 D[i][k] + D[k][j] < D[i][j]2)如果 i 和 j 之间有边,D[i][j] = 边权。1)如果 i == j,D[i][j] = 0。🍮能够检测图中是否存在。原创 2025-05-14 09:41:09 · 857 阅读 · 0 评论 -
迪杰斯特拉算法Dijiskra
对于第i行的第j个整数,如果大于0,则表示第i个顶点有指向第j个顶点的有向边,且权值为对应的整数值;在常用的单源点最短路径算法中,迪杰斯特拉算法是最为常用的一种,是一种按照路径长度递增的次序产生最短路径的算法。在带权有向图G中,给定一个源点v,求从v到G中的其余各顶点的最短路径问题,叫做单源点的最短路径问题。其中n不超过50,s小于n。4 1 **//这里的1表示第2个顶点,0-1-2-3共计4个顶点,下图为有向图的邻接矩阵。1)维护两个集合:已确定最短路径的节点集合(S)和未确定最短路径的节点集合(U)原创 2025-05-14 09:32:39 · 469 阅读 · 0 评论 -
Prim最小生成树
已知含有n个顶点的带权连通无向图,采用邻接矩阵存储,邻接矩阵以三元组的形式给出,只给出不包括主对角线元素在内的下三角形部分的元素,且不包括不相邻的顶点对。请采用Prim算法,求该连通图从1号顶点出发的最小生成树的权值之和。(注意这里顶点的序号是从1到n,而不是0到n-1,程序里要小心!最小生成树是指连接图中所有顶点的边的权重之和最小的树。,将该边加入生成树,并将对应的顶点加入已选集合。①找出连接已选集合和未选集合的最小权重边。求解的最小生成树的各条边、边的权值之和。④更新未选顶点到已选集合的最小距离。原创 2025-05-13 09:43:18 · 401 阅读 · 0 评论 -
图论——典型例题
警察抓到了 n 个罪犯,警察根据经验知道他们属于不同的犯罪团伙,却不能判断有多少个团伙,但通过警察的审讯,知道其中的一些罪犯之间相互认识,已知同一犯罪团伙的成员之间直接或间接认识。请你根据已知罪犯之间的关系,确定犯罪团伙的数量。窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的内容。当你点击屏幕上一个点的时候,你就选择了处于被点击位置的最顶层窗口,并且这个窗口就会被移到所有窗口的最顶层,而剩余的窗口的层次顺序不变。根据输入的图的邻接矩阵A,判断此图的连通分量的个数。原创 2025-05-13 09:34:38 · 924 阅读 · 0 评论 -
图论——图的遍历
本文介绍了图的基本概念、分类、术语、存储结构以及深度优先遍历(DFS)和广度优先遍历(BFS)算法。图由顶点和边组成,分为无向图、有向图、带权图等类型。图的存储结构包括邻接矩阵和邻接表,分别适用于稠密图和稀疏图。DFS通过递归或栈实现,沿着一条路径深入访问顶点,直到无法继续再回溯;BFS则通过队列实现,按层次顺序访问顶点。文章还提供了DFS和BFS的典型例题及代码实现,展示了如何创建图、进行遍历并输出结果。原创 2025-05-12 09:39:38 · 1784 阅读 · 0 评论 -
正则二叉树
🐣每个节点要么是叶子节点(没有子节点)🐤要么恰好有两个子节点(一个左子节点和一个右子节点)🐥换句话说,正则二叉树中不存在只有一个子节点的节点。原创 2025-05-12 09:20:27 · 449 阅读 · 0 评论 -
数据结构期末复习-哈夫曼树
其中n不超过100。第二行中有n个用空格隔开的正整数,分别表示n个字符的权值,依次按照abcd...的默认顺序给出。【问题描述】读入n个字符所对应的权值,自底向上构造一棵哈夫曼树,自顶向下生成每一个字符对应的哈夫曼编码,并依次输出。【问题描述】 输入一串正整数,正整数之间用空格键分开,请建立一棵哈夫曼树,以输入的数字作为叶子节点,求这棵哈夫曼树的带权路径长度。如出现相同权值的,则先出现的在左子树,即下标小的在左子树。【输入形式】 首先输入正整数的个数n,然后是对应的n个正整数,正整数个数不超过10个。原创 2025-05-10 12:17:37 · 417 阅读 · 0 评论 -
数据结构期末复习-二叉树(3)
⛅️ 上篇博文我们继续学习了二叉树的典型例题,这里我们将继续一些其它的二叉树的经典案例,如果遇到忘记的概念,可以去我的上两篇博文看看哦~原创 2025-05-10 12:01:44 · 202 阅读 · 0 评论 -
数据结构期末复习-二叉树(2)
⛅️ 上篇博文我们已经学习了二叉树的基本概念和一些典型例题,这里我们将继续学习二叉树的经典案例,如果遇到忘记的概念,可以去我的上一篇博文看看哦~原创 2025-05-09 09:44:20 · 305 阅读 · 0 评论 -
数据结构期末复习-二叉树(1)
二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树有多种类型,包括满二叉树、完全二叉树、二叉搜索树(BST)、平衡二叉树(AVL树)和堆。二叉树的遍历方式有前序遍历、中序遍历、后序遍历和层序遍历,每种方式都有其特定的应用场景。原创 2025-05-09 09:28:52 · 671 阅读 · 0 评论 -
数据结构期末复习-稀疏矩阵
这个一维数组的元素类型是一个三元组,由非零元素在该稀疏矩阵中的位置(行号和列号对)以及该元组的值构成。⛵目前博文包含课程设计、csp刷题、算法介绍、当下科技热点分享、网站软件推荐等等哦,还会更新学习到的深度学习、视觉等方面的知识~(如果发现你和博主是一个学校,那么仔细找找,也许会找到许多你需要的东西✌️)第一排为分别为A、B元素的个数,以下各排分别输入对应的三元组,头m组为A中的元素,接下来为B的元素,同一个矩阵的元素按照行递增排列,第一行规定为1,同一行的元素按照列递增排列,第一列规定为1。原创 2025-05-08 09:32:11 · 333 阅读 · 0 评论 -
数据结构期末复习-队列(1)
【问题描述】已知Q是一个非空队列,S是一个空栈。仅使用少量工作变量以及对队列和栈的基本操作,编写一个算法,将队列Q中的所有元素逆置。从第3行开始,每行首尾为1,中间元素为上一行相邻两数之和,通过队列尾部指针计算并入队。:利用队列的先进先出特性,通过动态计算生成每一行的数值并存储,最后按格式输出。:按层级从队列中取出元素打印,首行单独处理,后续每行元素数与行号对应。【输入形式】输入的第一行为队列元素个数,第二行为队列从首至尾的元素。函数中,从数组末尾向前遍历输出,模拟队列逆置的效果。分别表示队头和队尾。原创 2025-05-07 09:44:41 · 203 阅读 · 0 评论 -
数据结构期末复习-栈(2)
(输入输出序列皆为整数且没有重复的数字,如果一个数字在输入序列中没有出现,那么其在输出序列中也不会出现)【样例说明】第一行输入的第一个数字是序列的长度,1 2 3 4 5 输入序列,以空格隔开,输出的总的出栈次数。【输入形式】第一行为输入序列的长度,然后为输入序列的数字;【问题描述】给出一个堆栈的输入序列,试判断一个序列是否能够由这个堆栈输出。检查栈是否为空,如果为空则返回false(没有匹配的左括号)如果栈不为空,说明有未匹配的左括号,返回false。【输出形式】如果是一个出栈序列,则返回总的。原创 2025-05-07 09:36:10 · 235 阅读 · 0 评论 -
数据结构期末复习-栈(1)
【问题描述】试写一个算法,识别依次读入的一个以“@”为结束符的字符序列是否为形如 “序列1&序列2” 模式的字符序列。例如,“ a+b&b+a ”是属该模式的字符序列,而 “1+3&3-1”则不是。⛵目前博文包含课程设计、csp刷题、算法介绍、当下科技热点分享、网站软件推荐等等哦,还会更新学习到的深度学习、视觉等方面的知识~(如果发现你和博主是一个学校,那么仔细找找,也许会找到许多你需要的东西✌️)【问题描述】栈的应用,给定一个以“#”作为结束符的算式,求出算式的结果。【输出形式】输出表达式运算的结果。原创 2025-05-06 11:23:27 · 886 阅读 · 0 评论 -
数据结构期末复习-循环链表案例
数据结构循环链表的介绍原创 2025-05-06 11:09:41 · 144 阅读 · 0 评论 -
数据结构期末复习-单链表代码案例
单链表是一种由多个节点组成的线性结构,每个节点包含两个部分:数据域(data):存储具体的数据元素;指针域(next):存储指向下一个节点的指针。整个链表通过首节点开始,逐个指向后继节点,最后一个节点的 next 指针为空(NULL),表示链表结束。原创 2025-05-05 09:35:29 · 445 阅读 · 0 评论 -
数据结构期末复习-顺序表代码案例
顺序表是用一组地址连续的存储单元依次存储线性表的数据元素的结构。每个元素在表中都有唯一的前驱和后继(第一个元素无前驱,最后一个元素无后继)。原创 2025-05-05 09:23:47 · 292 阅读 · 0 评论