- 博客(25)
- 收藏
- 关注
原创 给我二十分钟,带你走进图的世界
本文从树形结构过渡到图结构,探讨了图的基本概念和存储方式。图作为非线性数据结构,能表示任意对象间的复杂关系网络,分为有向图和无向图。文章详细介绍了图的基本术语(顶点、边、度、连通性等)、特殊类型(完全图、子图、生成子图)以及存储结构(邻接矩阵、邻接表等)。图的权值概念使其能解决实际问题,如最优路径规划。存储结构的选择直接影响算法效率,邻接矩阵直观但空间效率低,邻接表更高效但邻接查询较慢。后续将介绍图的具体代码实现和应用算法。
2025-11-05 15:44:00
1005
原创 极限挑战之一命速通哈夫曼树
本文探讨了哈夫曼树及其编码在数据压缩中的应用。哈夫曼树作为最优二叉树,通过最小化带权路径长度(WPL)实现高效编码。文章详细介绍了哈夫曼树的基本概念、构建方法(表格法)及编码原理,包括统计字符频率、合并最小权值节点等关键步骤,并分析了顺序存储结构的优势。最终指出哈夫曼编码通过为高频字符分配短编码来优化整体存储/传输代价。
2025-11-03 22:36:33
1248
原创 极限挑战之一命速通二叉搜索树
本文摘要:文章深入探讨了二叉搜索树(BST)的概念与核心性质,指出其有序性带来的高效查找优势(O(logn)),但存在极端退化为链表(O(n))的问题。详细讲解了BST的结构设计、创建以及关键操作:通过递归实现插入(维护有序性)和复杂删除操作(分三种情况处理)。特别强调,虽然基础BST在实际工程中较少直接使用,但它是学习AVL树、红黑树等平衡树的重要基础。文中包含完整的C语言代码实现,展现了从理论到实践的完整学习路径。(149字)
2025-10-28 17:10:49
1057
原创 以“空”驭“满”:线索化解构二叉树的遍历困局
本文介绍了线索二叉树的概念及其实现方法。线索二叉树通过利用普通二叉树中的空指针域,存储节点在遍历顺序中的前驱和后继信息,从而将二叉树转换为线性链表结构。文章重点阐述了中序线索二叉树的实现过程,包括节点结构设计、标记位作用、线索化算法逻辑,并通过图示详细展示了线索化的具体步骤。线索二叉树解决了普通二叉树中空指针浪费空间和遍历效率低的问题,使遍历可以在不使用递归或栈的情况下完成。文章还提供了中序遍历线索二叉树的代码实现,展示了如何利用线索高效地进行遍历操作。
2025-10-26 18:08:53
1112
原创 从树之根本到遍历之万象:二叉树的构建与探索
本文摘要(150字): 本文系统介绍了树形数据结构的基本概念及其核心特性。首先对比了线性结构与树结构的区别,指出树是"一对多"的层级关系结构。详细讲解了树的节点关系(父节点、子节点、叶子节点)、度、层次、深度和高度等核心概念。重点介绍了二叉树这一特殊树形结构,包括其五种形态、满二叉树和完全二叉树的定义,以及二叉树的重要数学性质。最后阐述了二叉树的两种存储方式(顺序存储和链式存储)及其创建方法,包括节点创建、树结构初始化和节点插入操作。通过图示和代码示例,帮助读者全面理解树这一非线性数据结
2025-10-23 16:51:59
1045
原创 顺序队列的疆界,链式队列的星河
本文介绍了队列(Queue)这种先进先出(FIFO)的数据结构。与栈的后进先出特性不同,队列只允许在队尾插入(入队),在队头删除(出队)。文章重点讲解了两种队列实现方式:基于数组的顺序队列和基于链表的链式队列。 顺序队列采用循环结构解决"假溢出"问题,通过"浪费空间法"区分队列空和满的状态。链式队列则通过头节点封装管理信息,提高操作效率。文章通过生动的咖啡店排队比喻,帮助读者理解队列的核心概念和应用场景。 两种实现方式各具特点:顺序队列空间利用率高但容量固定,链式队列
2025-10-18 01:32:24
988
原创 静若处子,顺序栈的坚守;动若脱兔,链式栈的奔流
本文介绍了栈数据结构的基本概念和两种实现方式:顺序栈(数组实现)和链式栈(链表实现)。栈是一种后进先出(LIFO)的线性表,只能在栈顶进行插入和删除操作。顺序栈使用数组存储元素,通过top指针标识栈顶位置;链式栈则采用链表结构,通过栈顶指针连接节点。文章详细讲解了栈的初始化、入栈、出栈等核心操作,并通过示意图帮助理解。此外,还列举了栈在浏览器前进后退、撤销操作等常见应用场景。通过学习,读者可以掌握栈的基本原理和实现方法。
2025-10-16 21:22:27
794
原创 “拥抱未来、回望过去”是双向循环链表的表语
本文介绍了双向循环链表的结构特点、优势及应用场景,并详细讲解了其插入和删除操作的实现方法。双向循环链表通过prev和next指针实现双向遍历,支持循环访问,在音乐播放器、浏览器历史记录等场景有广泛应用。插入操作时需从后往前更新指针避免断链,封装成addDNode函数便于调用。头插和尾插只需调整参数即可实现。删除操作通过辅助指针保存节点,更新相邻节点指针后释放内存。双向循环链表没有固定起点终点,操作高效灵活。
2025-10-15 21:44:23
800
原创 向简朴皈依:单向循环的宿命之美
本文介绍了单向循环链表的基本概念、应用场景及核心操作。单向循环链表是一种尾节点指向头节点形成闭环的线性数据结构,广泛应用于操作系统调度、游戏回合管理、循环播放列表等场景。文章通过图示详细展示了带头指针和带头节点的空/非空单向循环链表形态,并重点讲解了头插和头删的核心操作步骤,强调带头节点设计能简化操作逻辑。最后指出完整实现还需补充初始化、打印等辅助功能,但核心原理与普通单向链表类似。全文采用图文结合的方式,配合生动讲解,帮助读者理解这一重要数据结构。
2025-10-14 17:51:52
1158
原创 向秩序低头:手把手教你实现带头节点的单向链表
本文介绍了带头指针且含dummy节点的链表结构及其操作优势。dummy节点作为哨兵节点,放置在链表头部可以统一操作逻辑,避免修改head指针本身,简化边界条件处理。文章详细讲解了链表的定义、头插法和任意位置插入法的实现过程,并通过图示展示了dummy节点如何使插入操作逻辑一致化。同时指出删除操作与插入操作原理类似,都得益于dummy节点的引入而得到简化。全文通过代码示例和流程图解,帮助读者理解带头指针链表中dummy节点的作用和实现方法。
2025-10-13 15:48:14
1036
原创 指针为舟,单向织链:数据之序
摘要: 链表是一种线性数据结构,通过节点存储数据,每个节点包含数据域和指向下一节点的指针域。与物理连续的顺序表不同,链表在逻辑上通过指针实现连续性。插入节点时,只需调整指针指向,无需数据搬移,步骤如下:创建辅助指针定位前驱节点、创建新节点、更新新节点指针、调整前驱节点指针。删除节点需引入临时指针备份待删节点。本文以C语言实现带头节点的单向链表,包括创建/释放链表、头插法、任意位置插入、按值删除及显示功能,重点解析了指针操作的核心逻辑与边界条件处理。
2025-10-11 17:57:05
719
原创 C++手动实现MyString类
本文介绍了手动实现C++字符串类MyString的过程,重点解析了类设计中的关键点和难点。作者通过封装动态字符数组,实现了自动内存管理、安全操作接口等功能。核心内容包括:成员变量设计(动态内存分配)、构造函数系列实现(默认构造、C字符串构造、深拷贝构造)、析构函数的内存释放、以及赋值运算符的深拷贝处理。文章特别强调了赋值运算符实现中的自赋值检查、内存释放和链式操作支持。最后展示了基础功能函数和测试用例,体现了面向对象编程的封装思想。该实现解决了原生字符数组的易用性问题,同时避免了常见内存错误。
2025-10-10 14:20:55
1262
1
原创 连续为骨·动态化形
malloc 本质:程序运行时的“内存临时租赁”,需手动申请(malloc)和归还(free)核心价值:灵活处理未知大小的数据(如动态数组、链表节点)
2025-06-04 22:59:57
1196
2
原创 对组初逢疑路险,二叉深探觉天明
mmmmmmmmmmmmmmmmmmmap容器,我们今天要学习的是map容器。它和我们之前所学的容器又不太一样,大家可要认真学习噢…
2025-05-28 21:23:52
2296
原创 妙手天成排无序,去冗存真立乾坤
set容器默认排序是从小到大,那么你是否想过更改其排序规则呢?这就是我们接下来要学习的内容~public:int m_Age;//利用仿函数来指定set容器的排序规则,且必须提前声明public://最后的const是为了防止动用this指针,避免类内数据改变//指定排序规则按照年龄降序排列//容器参数列表中需传入仿函数Person p1("刘备", 24);Person p2("关羽", 28);Person p3("张飞", 25);
2025-05-26 23:43:14
750
原创 今夜栈帧皆似雪,明朝队列俱如鸿
本文介绍了三种STL容器:stack、queue和list的基本概念和常用操作。stack容器是先进后出的数据结构,支持push、pop、top等操作;queue容器是先进先出的数据结构,具有两个出口,支持push、pop、front等操作。list容器是双向链表结构,支持高效的插入删除操作,但遍历效率较低。文章通过示例代码演示了各容器的构造、赋值、交换、大小操作及增删改查等基本功能,并比较了不同容器的特点和应用场景,帮助读者理解这些常用容器的核心概念和使用方法。
2025-05-25 01:46:51
1827
原创 墨分五色:双端队列的水墨哲学
经过string容器和vector容器的学习后,想必大家对“什么是容器”以及“怎么学习容器”都有了更加深入的认识了吧?那么今天就让我们步入deque容器的学习吧~
2025-05-22 16:23:22
474
原创 星轨七重变奏:vector容器的潮汐叙事
怎么样?看完后是否感觉到恍然大悟呢?如果仍然看的不太懂,那只能说明之前学过的知识不太扎实,建议回头复习一下噢~
2025-05-21 18:34:53
2866
原创 C++ string容器零基础入门之从创建字符串到基本操作
内心OS:其实我用在写完这篇博客的时间,比我真正去学习string容器的时间是要多出两到三倍的。有人可能会问:值吗?我觉得很值,非常值。在学习的过程中我其实全程1.5倍速左右,虽然也有在从头到尾地跟着视频写代码,但却总感不扎实。可写博客的过程却极大地减少了我的这种不踏实感。在此过程中,我不仅将string容器中的各个知识点进行了总结、把各个知识点的视频全部重新一倍速地看了一遍,而且还将碎片化的知识用网状的思考、构建树状的结构并最终以线性的语句来组成这篇呈现在你面前的博客时,这个过程于我而言是受益匪浅的。
2025-05-20 23:49:07
867
原创 25.5.19(C++)
自定义类型可以是结构体(struct)或类(class),需包含必要的构造函数、析构函数及成员变量。下面以Person类为例~public:int m_Age;//Person是普通参数类型,通过"."来访问成员属性it!= v.end();it++)cout << "姓名:" << (*it).m_Name << " 年龄:" << (*it).m_Age << endl;//Person*是一个指针,需要通过"->"来访问成员属性it!= v.end();it++)
2025-05-20 00:34:23
463
原创 25.5.17(C++)
了解完普通函数和函数模板的区别后,那么,我什么时候应该调用普通函数,什么时候应该调用函数模板呢?是不是应该去学一下?没错,我又学了一下下。
2025-05-18 01:11:59
1162
原创 25.5.16(C++)
若调用的函数模板未指定数据类型,要想成功使用函数模板,要么删除所调用函数前的声明模板的代码,要么显示指定类型,直接告诉声明函数模板中“T”的数据类型,因为模板必须要确定出T的数据类型才可以使用!在自动数据类型推导下,函数模板里的数据类型必须要是相同的数据类型才可以使用函数模板,若不同则无法使用。
2025-05-17 02:40:06
367
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅