自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 深度优先搜索(DFS)

深度优先搜索(Depth-First Search,DFS)是一种常见的图遍历算法,用于在图或树等数据结构中探索所有可能的路径,以及查找特定目标(如寻找路径、判断连通性等)。DFS从一个起始顶点出发,沿着一条路径尽可能深入地访问顶点,直到不能继续为止,然后回溯到之前的顶点,继续尝试其他路径。这个过程通常使用递归来实现。在图的DFS中,我们需要记录已经访问过的顶点,以避免无限循环。从起始顶点开始,对于每个未访问的邻接顶点,我们递归地执行DFS。下图为一个示例图,我们将对这个图进行DFS遍历。

2023-08-11 23:14:48 1293 1

原创 广度优先搜索(BFS)

/ 定义图的边结构// 与边相连的另一顶点的索引Edge* next;// 指向下一条邻接边的指针} Edge;// 定义图的顶点结构// 顶点数据// 指向第一个邻接边的指针} Vertex;// 定义图的邻接表结构// 图中顶点的数量// 存储顶点的数组} Graph;

2023-08-03 22:37:28 11200

原创 ∫xf(sinx)dx=(π/2)∫f(sinx)dx(在0~π的定积分)及其推广

考研数学,∫xf(sinx)dx=(π/2)∫f(sinx)dx(在0~π的定积分)及其推广

2023-07-21 16:49:34 17617 3

原创 【数据结构】基本概念汇总(确定不看?)

数据结构 易混淆 易忘记的基本概念帮你整理好了,对考研也有帮助哦!

2023-11-04 23:39:54 182

原创 2路归并排序

2. 利用递归将待排序数组划分到每组只剩一个元素,相邻的两组有序序列进行合并。1. 申请一个与待排序数组一样大小的辅助数组。最好最坏平均都是O(nlogn)O(n)(需要一个辅助数组)3. 最终得到全部有序。

2023-10-04 08:00:00 164

原创 堆排序

2. 大根堆:对于树中任意一个结点n,n大于它的左孩子、右孩子,根结点最大。3. 小根堆:对于树中任意一个结点n,n小于它的左孩子、右孩子,根结点最小。4. 使用大根堆排序得到递增序列,使用小根堆排序得到递减序列。1. 堆分为大根堆、小根堆,逻辑上是一棵完全二叉树。2. 将第一个也就是最大的元素与最后一个元素交换。3. 对于交换后的第一个元素,重新调整为大根堆。最好最坏平均都是O(nlogn)1. 将待排序序列建立成大根堆。4. 重复2、3,一共n-1次。调整为大根堆是关键,下面是代码。

2023-10-03 17:59:06 200

原创 快速排序

总是以第一个元素为基准,目标是找到基准的位置,使得右边都大于基准,左边都小于基准,然后再递归左右的子表,从而找到所有元素的位置,完成排序。最好情况:O(nlogn)最坏情况:O(n^2)由于要使用递归函数栈。

2023-09-28 08:00:00 117

原创 简单选择排序

每趟找到未排序序列的最小值放在最前面,一共n-1趟。最好情况:O(n^2)最坏情况:O(n^2)

2023-09-27 14:34:58 56

原创 冒泡排序

每趟从前往后(或从后往前)两两比较相邻元素的值,若为逆序(即A[ j ]>A[ j+1]),则交换它们,最后的元素一定是最大的。一共进行n-1趟就可以排序成功。最坏情况:O(n^2)

2023-09-26 20:54:34 70

原创 直接插入排序

直接插入排序的代码实现

2023-08-31 14:45:43 129

原创 二叉排序树(BST)

二叉排序树的基本概念和代码

2023-08-30 11:17:39 1259

原创 树的存储方法、树与二叉树、森林与二叉树的相互转化

一般树的存储方法、二叉树与树的相互转化、森林与二叉树的相互转化

2023-08-23 16:23:29 75

原创 二叉树的遍历

二叉树的先、中、后序遍历,层次遍历,利用递归特性求

2023-08-23 12:31:06 70

原创 树的易忘性质

树的易忘性质

2023-08-22 14:39:44 69

原创 特殊矩阵的压缩存储

特殊矩阵的压缩存储

2023-08-22 11:49:05 77

原创 拓扑排序:有向无环图的线性排序算法

拓扑排序C/C++代码实现

2023-08-20 22:06:38 174

原创 折半查找(二分查找)

折半查找是一种高效的算法,适用于有序数组中的元素查找,时间复杂度是O(logn)。通过逐步缩小查找范围,可以快速定位目标元素。

2023-08-20 10:43:04 4191

原创 Floyd算法:解决所有点对最短路径

Floyd算法的C++实现

2023-08-19 16:51:48 377

原创 Dijkstra算法:求单源最短路径

Dijkstra算法的具体实现

2023-08-17 17:00:21 1217

原创 Kruskal算法:最小生成树的构建

Kruskal算法避圈法的代码实现

2023-08-15 17:34:02 4278 1

原创 并查集

并查集是一种用于管理集合的数据结构,它主要支持两种操作:合并(Union)和查询(Find)。并查集用于维护一个元素的集合划分,每个集合称为一个组或一个集。将两个集合并成一个集合。判断某个元素属于哪一个集合,判断某两个元素是否同属一个集合。并查集是一种强大的数据结构,用于解决集合合并与查询问题。通过合并和查询操作,可以有效地管理元素之间的关系。点个关注吧~~~~~~

2023-08-14 15:26:39 61

原创 Prim算法:最小生成树的构建

Prim算法的具体实现

2023-08-13 18:57:07 1645 1

原创 邻接多重表:高效表示无向图

/ 邻接多重表的边节点int ivex;int jvex;} EdgeNode;// 邻接多重表的顶点节点char data;// 顶点数据,可以是任意类型// 该顶点的第一条边//邻接多重表的定义。

2023-08-10 21:59:51 474 1

原创 BFS算法求无权图最短路径问题

前一篇文章我们详细讲了BFS的原理及实现,在使用BFS遍历图的过程中,我们可以对每个顶点进行标记,标记当前顶点距离源头顶点的距离。这个距离我们用int d[i]来存储,由于BFS的性质,d[i]中存放的就是源头顶点v到顶点i的最短路径。

2023-08-04 16:06:13 791 1

原创 双端队列

双端队列(Deque),全称为Double-Ended Queue,是一种允许从队列的两端进行插入和删除操作的数据结构。它综合了队列和栈的优点,因此可以同时支持队列和栈的操作。在双端队列中,我们可以在队列的前端(头部)和后端(尾部)添加或移除元素。总之一句话,普通队列是队头出元素,队尾进元素,双端队列是队头队尾均可进出元素。为了进出元素,实际上就是对元素进行插入删除操作,所以用链式存储。由于需要在队尾进行删除操作(出队),那么就需要一个prev_rear指针来记录尾结点的前一个结点的指针。

2023-08-02 15:52:11 384 3

原创 栈的应用(括号匹配)

【代码】栈的应用(括号匹配)

2023-08-01 21:32:50 60 1

原创 队列的链式存储

队列(Queue)是一种常见的数据结构,它遵循先进先出(FIFO)的原则。在队列中,元素从队尾入队,从队头出队。链式队列是队列的一种实现方式,其中每个元素(节点)通过指针连接在一起。首先,我们定义链式队列的结点结构,包含存储的数据和指向下一个节点的指针。//带头结点int data;//存储数据//指向下一个结点}LinkNode;然后,定义带头结点的链式队列,其中包含指向头结点和尾节点的指针。//头尾指针}LinkQueue;

2023-08-01 16:40:03 272 1

原创 循环队列

循环队列是一种重要的数据结构,在多种应用场景中都能发挥重要作用。通过本文的介绍,我们对循环队列的原理和实现有了更深入的了解,树的层次遍历还需要用到队列。希望读者通过本文的学习,能够更好地应用循环队列解决实际问题。

2023-07-31 22:16:53 304 1

原创 队列的顺序存储

队列的顺序存储是一种简单高效的实现方式,使用数组作为底层数据结构,可以实现队列的基本操作。在本文中,我们介绍了队列的顺序存储结构及其基本操作,包括初始化队列、判断队列是否为空、入队操作、出队操作和获取队头元素。希望本文对你理解队列的顺序存储和基本操作有所帮助。需要记住的一点是,我们一般不使用这种方式,而是使用循环队列,下一篇文章我会讲到循环队列。

2023-07-31 10:45:50 214 1

原创 循环双链表

循环双链表(Circular Doubly Linked List)是一种常见的数据结构,它是双向链表的一种扩展形式。和双向链表一样,循环双链表中的每个节点都包含两个指针,一个指向前一个节点,另一个指向后一个节点。不同之处在于,循环双链表的最后一个节点的后继指针指向头节点,头节点的前驱指针指向最后一个节点,从而形成一个循环。循环双链表可以在任意位置高效地插入和删除节点,并且可以双向遍历整个链表。int data;//存储数据//指向前后的指针。

2023-07-30 21:45:34 398 1

原创

栈(Stack)是一种常见的数据结构,它遵循"先进后出"(Last In First Out,简称LIFO)的原则。在栈中,最后一个添加的元素是第一个被移除的,类似于我们平时堆叠的盘子,只能从最上面取下或放上。int top;//栈顶元素的下标}sqStack;int data;栈是一种重要的数据结构,在计算机科学和编程中广泛应用。本文介绍了栈的基本概念和特点,并分别实现了顺序栈和链栈的相关操作,包括初始化、入栈、出栈和获取栈顶元素。通过比较顺序栈和链栈的特点,我们可以根据实际需求选择合适的栈实现。

2023-07-30 18:33:34 67 1

原创 循环单链表

循环单链表是一种线性数据结构,与普通单链表相似,每个节点包含数据域和指针域,但不同之处在于它的尾节点的指针不为空,而是指向头节点,形成了一个闭环。因此,从任何一个节点出发,都能够遍历整个链表。以下讲的都是带头节点的。本文详细介绍了循环单链表的定义、基本操作,并附上了用C实现循环单链表的代码。循环单链表在某些场景下比传统的单链表更具优势,通过形成闭环,使得循环单链表具有从任意节点出发遍历整个链表的特点。希望本文能为读者提供对循环单链表的全面了解,鼓励读者在实践中灵活运用循环单链表的妙用。

2023-07-29 17:06:58 539 1

原创 双链表

双链表是一种线性数据结构,每个节点除了包含数据域外,还包含两个指针:一个指向前一个节点的指针(前驱指针)和一个指向后一个节点的指针(后继指针)。与单链表不同的是,双链表既可以从头节点开始遍历到尾节点,也可以从尾节点开始遍历到头节点。下图为结点结构图:下图为1->2的一个例子:(带头结点)本文详细介绍了双链表的定义、基本操作以及实际应用。相比于单链表,双链表通过增加前驱指针实现了双向遍历的功能,提供了更多灵活性和便利性。

2023-07-28 23:23:36 74 1

原创 单链表

单链表是一种线性数据结构,由一系列节点组成。每个节点包含两个部分:数据域(用于存储数据)和指针域(用于指向下一个节点)。其中,第一个节点称为头节点,最后一个节点的指针域指向空(null)。下图为结点的结构图:下图为1->2->3的一条单链表的结构图:int data;//存储的数据//指向下一个结点的指针。

2023-07-27 22:48:24 60 1

原创 图的十字链表存储法:高效表示有向图与有向带权图

十字链表的概念及定义

2023-07-25 19:41:06 754

原创 图的邻接表存储法:高效节省空间的图表示方法

在图论中,图是一种常见的数据结构,用于表示各种实际问题中的关系。图的存储方法有多种,其中邻接表存储法是一种常用且高效的表示方法。本文将详细介绍图的邻接表存储法及其实现原理,同时分析其优缺点,并提供实际应用示例,以帮助读者深入了解和应用这一图表示方法。// 定义图的边结构// 与边相连的当前此顶点的索引Edge* next;// 指向下一个邻接边的指针} Edge;// 定义图的顶点结构// 顶点数据// 指向第一个邻接边的指针} Vertex;// 定义图的邻接表结构。

2023-07-24 07:00:00 2055

原创 图的邻接矩阵存储法详解与C++实现

邻接矩阵法存储图,以及对图的基本操作的C/C++代码实现

2023-07-22 22:14:32 2083 1

原创 顺序表的实现与基本操作

顺序表是线性表的一种,是顺序存储的。它使用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。顺序表与数组很相似,主要特点就是支持随机访问,顺序表的存储密度高,物理上和逻辑上都相邻。

2023-07-19 19:08:25 173 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除