自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 力扣每日一题——接雨水

摘要:本文介绍了三种解决"接雨水"问题的算法。问题描述为计算给定高度数组构成的柱子排列后能接多少雨水。解法一采用动态规划,预处理左右最大值数组;解法二使用单调栈,在遍历时计算低洼处积水;解法三运用双指针,边遍历边确定边界并计算积水量。三种方法的时间复杂度均为O(n),但空间复杂度分别为O(n)、O(n)和O(1)。代码实现展示了每种解法的具体操作步骤。

2025-11-01 19:25:25 311

原创 力扣每日一题——最长有效括号

本文讨论了求解最长有效括号子串长度的三种解法。第一种是动态规划法,使用dp数组记录有效括号长度,通过分析括号匹配的两种情况进行状态转移。第二种是栈解法,利用栈结构保持未匹配括号的位置,通过比较当前与栈顶元素距离计算有效长度。第三种是双向遍历法,通过左右计数器统计括号数量,正反两次扫描确保覆盖所有情况。三种方法时间复杂度均为O(n),其中动态规划和栈解法空间复杂度为O(n),双向遍历法为O(1)。示例代码展示了每种解法的具体实现,最终都能正确求出给定字符串中最长有效括号子串的长度。

2025-10-31 20:52:03 296

原创 数据结构中的顺序查找,二叉排序树,二叉平衡树

文章摘要:本文介绍了数据结构中的查找算法,包括顺序查找、折半查找(二分查找)和二叉排序树。顺序查找简单但效率低;折半查找要求有序表,效率较高;二叉排序树结合二者优点,支持高效查找、插入和删除。详细讲解了二叉排序树的查找、插入和删除操作,并提供了C语言代码实现。通过代码示例展示了二叉排序树的创建、遍历和节点操作过程,帮助理解其在实际应用中的优势。

2025-09-04 14:08:46 1671

原创 最短路径和关键路径的算法

本文介绍了两种求解最短路径的算法:迪杰斯特拉算法和弗洛伊德算法。迪杰斯特拉算法通过比较顶点与起始点之间的权值,利用path数组反推最短路径。文中给出了C语言实现代码及运行结果,展示了从V0到其他顶点的最短路径。弗洛伊德算法则通过两个数组判断顶点间是否经过中间结点来求解最短路径,同样提供了实现代码和部分运行结果。两种算法都能有效解决最短路径问题,但实现方式不同,适用于不同场景。

2025-08-23 14:13:36 625

原创 最小生成树的普利姆算法和克鲁斯卡尔算法

本文介绍了两种构造最小生成树的算法:普利姆算法和克鲁斯卡尔算法。普利姆算法从顶点出发,每次选择最小权值的边扩展树结构,时间复杂度为O(n²)。克鲁斯卡尔算法直接对边操作,按权值排序后依次选择边并避免形成回路,时间复杂度为O(eloge)。文中给出了两种算法的C语言实现代码和运行结果对比,并指出克鲁斯卡尔算法适合边数少的稀疏图,普利姆算法更适合边数多的稠密图。两种算法都能保证生成总权值最小的连通树,但采用不同的策略实现。

2025-08-21 21:05:35 628

原创 图的深度优先算法和广度优先算法

本文介绍了图的深度优先搜索(DFS)和广度优先搜索(BFS)算法的实现。首先通过邻接矩阵创建了一个包含9个顶点和15条边的图。DFS算法采用递归方式实现,沿着一个方向深入搜索,直到无法继续再回溯;BFS算法使用队列实现,按层次遍历图的节点。两种算法都通过访问标记数组避免重复访问。测试结果表明,DFS输出顺序为A B C D E F G H I,BFS输出顺序为A B F C G I E D H,验证了算法的正确性。这些算法是图遍历的基础方法,具有广泛的应用价值。

2025-08-21 18:14:33 464

原创 图的存储结构

其中边数组中如果两个顶点相连有这条边的权值来表示,如果两个顶点不相连则有∞来表示,顶点自身无相连依旧用0来表示。其中边数组中横列表示入方向,纵列表示出方向,同样也是用0和1来表示两顶点是否相连。在有向图的邻接表中,需要两个数组来进行表示,很麻烦,用十字链表可以解决这个问题。用一个数组来进行存储,其中数组中存放链表,将相连的顶点用链表来连接。分别是顶点数组和边数组,其中边数组是二维数组。图的存储结构有两种形式:邻接矩阵和邻接表。和无向图的邻接表类似,只是需要注意出和入。同样也是用顶点数组和边数组来存储图。

2025-08-21 11:17:25 380

原创 图的基本概念

图是由顶点的有穷非空集合和顶点之间边的集合组成的.统称为G(V,E),其中G代表一个图,V代表图中顶点的集合,E代表图中边的集合,V(G)E(G)分别表示G的顶点集合和边集合。指含有图中全部顶点的极小连通子树,包含所有顶点n,但只有足以构成一棵树的n-1条边。在无向图中,假设有n个顶点,e条边,图中所有顶点的度数之和等于边数的二倍。在一个图中,每一条边可以标注一个代表某个含义的数值,该数值为这个边的权值。连通:在无向图中,如果从顶点V到顶点W有路径,则称v到w是连通的。

2025-08-20 10:05:00 346

原创 层序遍历的实现及例题

本文介绍了使用层序遍历实现二叉树深度计算的方法。首先给出一个基于队列的深度计算代码示例,通过前序构建二叉树"ABDH#K###E##CFI###G#J##",验证了层序遍历计算深度的可行性。接着以带权二叉树为例,展示了如何利用层序遍历计算所有叶子节点的带权路径长度(WPL),通过构建特定二叉树结构并实现相应算法,最终输出正确的WPL值。两个示例均采用C语言实现,展示了层序遍历在二叉树问题中的实际应用。

2025-08-19 10:54:24 499

原创 树、森林、二叉树之间的转化以及遍历

3.层次调整,以根结点为轴心,将整棵树顺时针旋转一定角度,使之层次分明,注意第一个孩子是二叉树结点的左孩子,兄弟转过来的孩子是该结点的右孩子。1.加线,若某个结点的左孩子存在,则将这左孩子的所有右孩子结点都作为此结点的孩子,将该结点与这些右孩子结点用线连接。2.去线,对树中的每一个结点,只保留它与第一个孩子的孩子结点的连线,删除它与其他孩子结点之间的连线。2.第一颗二叉树不动,从第二课树开始,依次把后一颗二叉树的根结点作为前一棵树根结点的右孩子用线链接。由此可见,二叉树,树,森林之间的遍历关系。

2025-08-18 11:38:28 534

原创 数据结构中的哈夫曼树

本文介绍了哈夫曼树及其应用。哈夫曼树是一种带权路径长度(WPL)最小的二叉树,通过将频率高的数据放在靠近根节点的位置来提高效率。文章详细说明了构造哈夫曼树的步骤:排序叶子节点、合并最小权值节点、重复操作直至形成完整树。此外,还介绍了哈夫曼编码的原理,通过为字母分配不等长编码(左0右1)来优化数据传输,相比二进制编码更高效。最后通过例题验证了相关概念的理解程度。

2025-08-16 13:26:00 496

原创 线索二叉树的实现与遍历

通过遍历可以得到二叉树的线性排序,但这样线性序列只有在遍历时才能得到,将二叉树线索化得到线索二叉树可以解决这个问题。(二叉树有n个节点,就有n+1个空余指针(2n-n+1))1.已知前序和中序遍历结果,可以确定唯一一颗二叉树。2.已知中序和后序遍历结果,可以确定唯一一颗二叉树。2.头结点的rchild指向遍历的最后一个结点。线索化:利用叶子节点的空余空间记录前驱和后继。二叉树的线性排列为HDIBJEAFCG。1.头结点的lchild指向二叉树的根。下图是将二叉树线索化的示意图。

2025-08-14 20:05:51 244

原创 树和二叉树的定义和实现

摘要:树与二叉树数据结构详解 树是由结点构成的层次结构,含根结点及若干互不相交的子树。关键概念包括结点的度、叶子结点、层次等。二叉树是每个结点最多有两棵子树的有序树,子树分左右且次序重要。满二叉树和完全二叉树是两种特殊形式,前者结点数达最大值,后者结点与满二叉树编号一一对应。二叉树具有特定性质,如第i层最多有2^(i-1)个结点,叶子结点数n0 = 度为2的结点数n2 + 1。 实现上,二叉树可采用顺序存储(仅适合完全二叉树)或链式存储(常用)。链式结构通过递归实现前序、中序和后序遍历,分别按根-左-右、左

2025-08-12 14:36:41 1471

原创 数据结构中的表达式求值以及转换

数据结构中后缀表达式的求值以及将中缀表达式转为后缀表达式

2025-08-09 11:05:50 618

原创 数据结构中队列的定义和实现

本文系统介绍了队列的定义、实现及典型习题。队列是一种先进先出(FIFO)的线性表,支持在队尾插入、队头删除。文章详细讲解了队列的顺序存储和链式存储两种实现方式,包括初始化、判空、入队、出队等基本操作,并通过代码示例验证功能。针对顺序队列的"假溢出"问题,提出循环队列解决方案。最后提供了10道关于栈和队列的典型选择题,涉及队列特性、循环队列容量计算等内容,帮助读者巩固理论知识。全文通过代码实现与理论分析相结合的方式,全面阐述了队列这一重要数据结构。

2025-08-07 10:33:20 746

原创 数据结构中的栈

栈是限定仅在表尾进行插入或删除操作的线性表,因此对栈来说,表尾端有其特殊含义,称为栈顶,对应的,表头端称为栈底,不含元素的空表称为空栈。假设S=(a1,a2,……an),a1为栈底元素,an为栈顶元素,栈中元素按照a1,a2……an的顺序进栈,退栈的第一个元素为栈顶元素,栈的修改是按照后进先出,先进后出的原则进行的。栈的进出原理如上图栈是限制插入和删除操作只能在一个位置进行的表,该位置是表的末端,叫做栈顶,栈的基本操作有进栈和出栈,前者相当于插入,后者相当于删除最后插入的元素。

2025-08-06 11:33:04 434

原创 循环链表和双向链表

本文介绍了循环链表和双向链表的基本概念及其应用。首先分析了单链表的局限性,如无法直接找到前驱节点,提出了循环链表作为解决方案。重点讲解了如何判断链表是否有环(使用快慢指针)以及找到环入口的方法。随后针对循环链表查找前驱效率低的问题,引入双向链表结构,详细说明了其存储结构、初始化、插入和删除操作的具体实现。最后通过选择题示例比较了链表和顺序表的特点,指出链表在插入删除操作上更高效,而顺序表在随机访问上更优。全文通过代码示例和图示直观展示了两种链表的实现原理和操作方式。

2025-08-06 10:12:55 455

原创 数据结构中单链表的应用

【代码】数据结构中单链表的应用。

2025-08-03 19:30:01 638

原创 数据结构中链表功能的实现

线性表链式存储结构的特点是:用一组任意的存储单元存储线性表的数据元素,这组存储单元可以连续也可以不连续,为表示数据元素与其后继元素之间的逻辑关系,对数据元素来说,除其本身的信息外,还存储了一个指示后继的一个信息,数据元素的存储映像为节点。节点:1.数据域:数据元素的信息2.指针域:直接后继存储的位置下面用代码来实现链表的一些功能。

2025-08-01 18:43:36 653

原创 数据结构中的线性表之顺序表的表示与实现

1.定义顺序表是由n个数据特性相同的元素(数据类型相同的数据)构成的有限序列,可以无限累加,可以插入。2.特点1.存在唯一一个被称为第一个的数据元素,即头节点唯一。2.存在唯一一个被称为最后一个的数据元素,即尾节点唯一。3.除了第一个元素外,结构中每个数据元素均只有一个前驱,即前一个节点。4.除了最后一个元素外,结构中每个数据元素均只有一个后继,即后一个节点。

2025-07-26 09:03:16 353

原创 数据结构与算法中的算法分析

ADT是一中编程概念,用于定义数据的类型及其操作,而不涉及具体实现细节,它提供了一种将数据的逻辑表示与物理实现分离的方法,从而使程序更具有可维护性和可扩展性,在C语言中,ADT通常由结构体和函数结合来实现,通常这种方式可以隐藏数据的内部结构,仅暴露操作数据的接口,其中结构体用来定义数据类型,函数用来操作这些数据。假设第t次结束循环,i需要满足结束循环的条件,所以2的t-1次幂应大于n,因为时间复杂度的计算不是严格意义的数学计算,所以令2的t-1次幂等于n,解得t等于log2n,(中间变量所需的空间)

2025-07-25 14:37:12 573

原创 数据结构中C语言的知识

使用。

2025-07-19 21:43:16 1663

原创 数据结构与算法前言

正所谓“数据结构 + 算法 = 程序”,由此可见,对于我们来说数据结构与算法这门课十分重要。一、顾名思义数据结构包含数据和结构1、数据在C语言中数据一般指int,char,float,double等数据类型,但数据并不是只局限在编辑语言中,而是存在在生活中的方方面面,我们在生活里每时每刻都在创造数据。2、结构所谓结构其实就是组织形式,而在C语言中有一个常见的例子——数组,数组就是一组相同数据的一种组织形式。

2025-07-18 20:59:39 104

空空如也

空空如也

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

TA关注的人

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