自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】入门02

本文摘要: C++引用:引用是变量的别名,不独立占用内存空间,必须初始化且不可更改引用对象。与指针相比,引用更安全但灵活性较低。 引用功能:用作函数参数可修改实参或减少拷贝;用作返回值可修改对象或提高效率,但需注意作用域问题。 const引用:可引用const对象或普通对象(权限缩小),临时对象具有常性,需用常引用避免权限放大。 指针与引用区别:指针存储地址、可更改指向、需解引用;引用是别名、不可更改指向、直接访问。引用更安全但无法替代指针(如链式结构)。 宏与内联函数:宏函数通过替换提高效率但复杂难调试;

2026-08-19 16:33:36 403 7

原创 【C++】入门01

本文介绍了C++中命名空间(namespace)的定义与使用方式,通过域隔离解决命名冲突问题。命名空间可以包含变量、函数和类型,支持嵌套定义和多文件合并。标准库位于std命名空间,可通过三种方式访问。文章还讲解了C++的输入输出流(cin/cout)及其运算符重载特性,对比了与C语言printf的性能差异。此外,详细说明了缺省参数的规则(全缺省/半缺省)和函数重载的三种实现方式(参数类型/数量/顺序不同),并指出可能导致歧义的重载情况。最后提到在IO密集型场景下优化输入输出效率的方法。

2026-08-14 17:30:41 224 3

原创 【数据结构与算法】八大排序

本文介绍了常见的排序算法及其实现方法,主要包括插入排序(直接插入排序、希尔排序)、选择排序(直接选择排序、堆排序)、交换排序(冒泡排序、快速排序)、归并排序和计数排序。文章详细讲解了每种算法的基本思想、时间复杂度、空间复杂度及稳定性分析,并提供了相应的代码实现。排序算法是计算机科学中的基础内容,掌握这些算法有助于提高编程能力和解决实际问题。

2026-08-13 17:35:56 675 9

原创 【数据结构与算法】一站式实现二叉树

本文介绍了链式二叉树的实现方法,涵盖以下核心内容: 二叉树遍历:详细讲解了前序(根左右)、中序(左根右)和后序(左右根)三种递归遍历方法,通过图示和代码示例说明实现原理。 基本操作:包括求结点个数、叶子结点个数、第K层结点个数、二叉树深度计算以及查找特定值的结点等算法实现。 层序遍历:借助队列数据结构实现二叉树的层序遍历,从上到下、从左到右访问每个结点。 代码实现:提供了完整的头文件和源文件代码,包含所有二叉树操作的函数声明和实现。 文章通过清晰的图示和代码示例,帮助读者理解二叉树的链式存储结构和相关操作的

2026-08-07 11:10:34 414 5

原创 【数据结构与算法】堆的经典应用——TOP-K问题

摘要:TOP-K问题指在大量数据中找出前K个最大/最小元素,常见于海量数据处理场景(如排行榜)。传统排序法内存消耗大(如10亿整数需4GB内存),而堆结构提供高效解决方案:1) 用前K个元素建小堆(求最大K个)或大堆(求最小K个);2) 剩余元素依次与堆顶比较,动态替换并调整堆。该方法仅需O(K)内存,尤其适合数据无法全加载到内存的情况。实验通过生成10万数据文件验证,修改部分值为极值后,成功通过堆结构准确提取TOP-K元素,证实了算法的实用性和内存效率优势。

2026-08-05 10:10:59 517 3

原创 【数据结构与算法】堆的补充

本文通过数学推导对比了建堆的两种方法:向上调整和向下调整。分析表明,向下调整建堆的时间复杂度为O(n),而向上调整则为O(n log n)。这是因为向下调整能更高效地利用堆的完全二叉树结构,减少调整次数。因此,向下调整法在性能上明显优于向上调整法,是建堆操作更优的选择。这一结论为堆排序和优先队列等算法的实现提供了重要的理论依据。

2026-08-04 17:46:39 327 1

原创 【数据结构与算法】树的再相识——堆

本文详细介绍了顺序结构二叉堆的C语言实现与堆排序算法。首先阐述了堆的基本概念,包括大根堆和小根堆的定义及性质。重点讲解了二叉树节点在数组中的索引关系,推导了父子节点间的数学公式,为堆操作奠定基础。文章详细解析了堆的两大核心算法:向上调整(用于插入操作)和向下调整(用于删除操作),并分析了它们的时间复杂度。在堆排序部分,提供了两种实现方式:基于现有堆结构和原地建堆排序,强调升序建大堆、降序建小堆的原则。最后给出了完整的C语言代码实现,包含堆的初始化、插入、删除等核心操作。通过本文,读者可以全面掌握堆数据结构的

2026-08-03 16:56:17 589 4

原创 【栈和队列】用队列来实现栈

本文实现了用两个队列模拟栈的功能。栈的特点是先进后出(LIFO),而队列是先进先出(FIFO)。通过维护两个队列q1和q2,核心思路是:入栈时直接插入非空队列;出栈时将非空队列的前n-1个元素转移到另一个队列,再弹出最后一个元素;获取栈顶元素即取非空队列的队尾元素。代码中实现了队列的基本操作(初始化、入队、出队等),并基于这些操作构建了栈的push、pop、top等方法,时间复杂度主要为O(n)。这种实现方式展示了数据结构间的相互转换技巧。

2026-07-30 11:27:32 219 2

原创 【栈和队列】用栈实现队列

这篇文章介绍了如何使用两个栈(pushST和popST)来实现队列的基本操作。队列的入队操作直接在pushST中插入数据;出队操作则检查popST是否为空,若为空则先将pushST的数据导入popST再出栈;获取队头元素的逻辑与出队类似,但不删除数据。文章提供了完整的C语言实现代码,包括栈的初始化、入栈、出栈等基本操作,以及基于双栈的队列初始化、入队、出队、获取队头和判断队列是否为空的功能实现。这种方法通过两个栈的协作,巧妙地模拟了队列先进先出的特性。

2026-07-30 11:26:37 135

原创 【数据结构与算法】树的初相识

本文介绍了树和二叉树的基本概念与结构。树是一种非线性数据结构,具有递归定义的特点,子树不相交且每个节点有唯一的父节点。二叉树是树的一种特殊形式,每个节点最多有两个子节点,且子树有左右之分。文章详细解释了相关术语,如度、层次、深度等,并介绍了两种存储结构:顺序结构(适合完全二叉树)和链式结构(二叉链和三叉链)。此外,还介绍了特殊的二叉树类型,如满二叉树和完全二叉树,以及它们的特点和性质。最后,提到了孩子兄弟表示法,这是一种将多叉树转换为二叉树存储的方法。

2026-07-27 15:17:06 583 6

原创 【数据结构与算法】栈和队列

本文系统介绍了栈和队列这两种基础数据结构。栈遵循LIFO(后进先出)原则,适合用数组实现入栈出栈O(1)操作;队列遵循FIFO(先进先出)原则,采用链表实现可优化尾部插入效率。文章通过对比数组/链表实现差异,详细给出了两种结构的C语言代码实现(含初始化、销毁、入/出操作等关键功能),并分析了时间复杂度和空间效率。这两种结构是理解函数调用、任务调度等计算机核心机制的基础,掌握它们对学习更复杂数据结构和算法至关重要。

2026-07-24 16:33:50 509 2

原创 【栈】有效的括号

摘要 本文介绍了LeetCode上"有效的括号"问题的栈解法。题目要求判断包含'(){}[]'的字符串括号是否正确闭合。解法使用栈数据结构:遍历字符串时左括号入栈,遇到右括号则检查是否与栈顶匹配,匹配则出栈。最终栈为空则有效。文章提供了完整的C语言实现代码,包括栈的基本操作和括号匹配逻辑,并通过示例展示了栈的状态变化过程。关键点在于正确处理三种无效情况:只有单边括号、顺序错误以及栈不为空的情况。

2026-07-24 10:29:26 151

原创 【数据结构与算法】双向链表

本文详细介绍了双向链表的分类与实现。链表可分为8种组合类型,但实际最常用的是单链表和带头双向循环链表。双向链表由包含前驱/后继指针的节点组成,空表时仅含头节点。文章重点讲解了双向链表的核心操作实现: 尾插:在尾部插入新节点,需调整原尾节点和头节点的指针 头插:在头节点后插入新节点,需处理空表情况 删除操作:尾删和头删都需注意防止野指针 查找:遍历链表直至找到目标数据 指定位置操作:在pos位置后插入数据或删除pos节点,需谨慎调整前后节点的指针关系 每个操作都配有代码示例和图示说明,强调指针操作的顺序重要性

2026-07-22 10:42:17 616 8

原创 【数据结构与算法】单链表

本文详细介绍了单链表的基本概念、结点结构及实现方法。单链表是一种物理存储非连续的线性表,通过指针实现逻辑顺序。文章重点讲解了链表的11种操作实现,包括初始化、打印、头插尾插、头删尾删、查找、指定位置插入删除等,并提供了相应的C语言代码示例。最后对比了顺序表和链表的性能差异,指出链表在插入删除操作上具有O(1)的时间复杂度优势。通过图文并茂的方式,帮助读者深入理解单链表的实现原理和应用场景。

2026-07-20 11:15:17 506 1

原创 【链表题目】03.移除链表元素

这道题要求删除链表中所有值等于给定val的节点。给出了两种解决方案: 直接遍历删除法:遍历链表查找等于val的节点并逐个删除,时间复杂度为O(N^2)。 新链表重构法:创建新链表,遍历原链表时将值不等于val的节点尾插到新链表。该方法时间复杂度优化为O(N),通过修改指针指向实现,无需额外空间。代码中定义了newhead和newtail指针管理新链表,最后返回新链表头节点。 关键点:第二种方法通过单次遍历实现高效删除,是更优解。

2026-07-15 18:29:20 312

原创 【链表题目】02.链表的中间结点(快慢指针)

本文介绍了两种寻找单链表中间节点的方法。第一种是通过计算链表总长度后取中间位置,时间复杂度为O(N)。第二种是更高效的快慢指针法:慢指针每次移动一步,快指针每次移动两步,当快指针到达链表末尾时,慢指针正好指向中间节点。文章详细分析了奇数/偶数节点情况下的终止条件,并提醒注意循环条件的判断顺序,避免空指针解引用错误。快慢指针法的时间复杂度同样为O(N),但实现更为简洁高效。

2026-07-09 00:35:47 226

原创 【链表题目】01.反转链表

摘要 本文介绍了两种反转单链表的算法。方法一是创建新链表并进行头插操作;方法二更高效,使用三指针法:n1初始为空,n2指向头节点,n3指向n2的下一个节点。通过循环将n2的next指向n1,并逐步移动三个指针,直到完成整个链表的反转。代码实现简洁,时间复杂度为O(n),空间复杂度O(1)。

2026-07-07 23:05:05 289

空空如也

空空如也

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

TA关注的人

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