<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hope_wisdom的技术博客]]></title><description><![CDATA[一起学习，一起成长，一起进步]]></description><link>https://blog.csdn.net/hope_wisdom</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; hope_wisdom]]></copyright><item><title><![CDATA[C/C++数据结构之二叉树的遍历]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/164425571</link><guid>https://blog.csdn.net/hope_wisdom/article/details/164425571</guid><author>hope_wisdom</author><pubDate>Sun, 06 Sep 2026 11:11:38 +0800</pubDate><description><![CDATA[二叉树的遍历是指按照某种规则访问二叉树中所有节点的过程。遍历不仅是理解二叉树结构的基础，也是实现各种树操作的前提。二叉树的遍历顺序主要由根节点的访问时机决定，从而形成了三种深度优先遍历方式：前序、中序和后序。此外，还有基于层次的广度优先遍历方式：层序遍历。
深度优先遍历的特点是：沿着树的深度尽可能深地搜索，直到到达叶子节点或无法继续为止，然后回溯。广度优先遍历的特点是：按照树的层次从上到下、从左到右依次访问节点。]]></description><category></category></item><item><title><![CDATA[C/C++数据结构之二叉树的节点统计]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/163397751</link><guid>https://blog.csdn.net/hope_wisdom/article/details/163397751</guid><author>hope_wisdom</author><pubDate>Sat, 01 Aug 2026 20:31:14 +0800</pubDate><description><![CDATA[对二叉树的节点进行统计是理解和操作二叉树的基础任务，包括：节点总数、叶子节点数、度为1的节点数、度为2的节点数、树的高度（深度）等。这些统计信息不仅有助于分析树的结构特性，还能为后续的遍历、查找、插入和删除等操作提供重要依据。]]></description><category></category></item><item><title><![CDATA[C/C++数据结构之二叉树基础]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/161727280</link><guid>https://blog.csdn.net/hope_wisdom/article/details/161727280</guid><author>hope_wisdom</author><pubDate>Fri, 05 Jun 2026 20:08:16 +0800</pubDate><description><![CDATA[二叉树是一种特殊的树形数据结构，其中每个节点最多只能有两个子节点：左子节点和右子节点。这种限制使得二叉树在处理数据时具有独特的性质，尤其是在搜索、排序和遍历操作方面。二叉树的基本组成元素包括：根节点、内部节点、叶子节点。根节点是树的顶端节点，没有父节点。内部节点至少有一个子节点，而叶子节点则是没有任何子节点的节点。二叉树可以为空，即不包含任何节点。]]></description><category></category></item><item><title><![CDATA[C/C++数据结构之树]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/160070843</link><guid>https://blog.csdn.net/hope_wisdom/article/details/160070843</guid><author>hope_wisdom</author><pubDate>Sun, 12 Apr 2026 09:13:36 +0800</pubDate><description><![CDATA[摘要：树是一种重要的非线性数据结构，由节点和边组成，广泛应用于文件系统、数据库索引等领域。其基本概念包括节点、根节点、叶子节点、路径、深度和高度等。常见的树类型有二叉树、二叉搜索树、AVL树、红黑树、B树/B+树和堆等，每种类型都有特定的应用场景和特点，如AVL树和红黑树用于保持平衡，B树/B+树适用于外部存储，堆用于优先队列实现。]]></description><category></category></item><item><title><![CDATA[C/C++数据结构之用链表实现队列]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/158354936</link><guid>https://blog.csdn.net/hope_wisdom/article/details/158354936</guid><author>hope_wisdom</author><pubDate>Tue, 24 Feb 2026 20:43:03 +0800</pubDate><description><![CDATA[在前一篇文章中，我们已经用数组实现了队列。在本篇文章中，我们将使用链表来实现队列。使用链表的优点是：动态增长，扩容时更加平滑。缺点是：略微复杂，需要额外管理所有节点。队列相关的操作，仍然是下面6个接口。]]></description><category></category></item><item><title><![CDATA[C/C++数据结构之用数组实现队列]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/157356705</link><guid>https://blog.csdn.net/hope_wisdom/article/details/157356705</guid><author>hope_wisdom</author><pubDate>Sun, 25 Jan 2026 10:41:08 +0800</pubDate><description><![CDATA[本文介绍了使用C++数组实现队列的方法。通过定义CArrayQueue类，实现了队列的6个基本操作：Enqueue(入队)、Dequeue(出队)、Front(查看队首)、Rear(查看队尾)、IsEmpty(判空)和Size(获取大小)。采用动态数组和循环队列设计，当容量不足时自动扩容。关键实现包括：使用模运算处理循环指针，动态调整数组大小，以及维护front、rear指针和元素计数。示例代码展示了完整的队列实现，包括构造函数、析构函数和各操作方法，并提供了简单的测试用例演示队列的基本功能。]]></description><category></category></item><item><title><![CDATA[C/C++数据结构之队列基础]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/156359942</link><guid>https://blog.csdn.net/hope_wisdom/article/details/156359942</guid><author>hope_wisdom</author><pubDate>Sun, 28 Dec 2025 13:06:08 +0800</pubDate><description><![CDATA[与前面几篇文章中介绍的栈不同，栈是后进先出，而队列是先进先出。队列最直观的例子就是：人们在银行、餐厅或售票窗口前排队等候服务。最早到达的人会最先得到服务，这与队列的操作原则基本一致。队列作为一种基础的数据结构，遵循先进先出（FIFO, 即First-In-First-Out）的原则。其核心概念主要包括如下三点。]]></description><category></category></item><item><title><![CDATA[C/C++数据结构之用链表实现栈]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/153917461</link><guid>https://blog.csdn.net/hope_wisdom/article/details/153917461</guid><author>hope_wisdom</author><pubDate>Sun, 26 Oct 2025 11:00:56 +0800</pubDate><description><![CDATA[在前一篇文章中，我们已经用数组实现了栈。在本篇文章中，我们将使用链表来实现栈。使用链表的优点是：动态增长，扩容时更加平滑。缺点是：略微复杂，需要额外管理所有节点。栈相关的操作，仍然是下面5个接口。
Push：向栈中添加一个元素。
Pop：从栈中移除顶部元素，并返回该元素。
Top：查看栈顶元素但不移除它。
IsEmpty：检查栈是否为空。
Size：获取栈中元素的数量。]]></description><category></category></item><item><title><![CDATA[C/C++数据结构之用数组实现栈]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/152334151</link><guid>https://blog.csdn.net/hope_wisdom/article/details/152334151</guid><author>hope_wisdom</author><pubDate>Tue, 30 Sep 2025 20:57:52 +0800</pubDate><description><![CDATA[本文介绍了在C/C++中使用数组实现栈的方法。栈的基本操作包括Push(入栈)、Pop(出栈)、Top(查看栈顶)、IsEmpty(判空)和Size(获取大小)。通过动态数组实现可以灵活管理内存，当栈满时自动扩容。实现中使用了四个成员变量：存储元素的动态数组指针、容量、栈顶索引和元素数量。关键操作包括Push时检查扩容、Pop时检查空栈，以及实现动态扩容的Resize函数。完整代码展示了栈的初始化和各项操作的实现细节，包括异常处理和内存管理。]]></description><category></category></item><item><title><![CDATA[C/C++数据结构之栈基础]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/151292345</link><guid>https://blog.csdn.net/hope_wisdom/article/details/151292345</guid><author>hope_wisdom</author><pubDate>Sun, 07 Sep 2025 17:51:00 +0800</pubDate><description><![CDATA[在食堂或自助餐厅中，清洁的餐盘通常会按照从下到上的顺序堆叠在一起。服务员或者顾客需要使用时，总是从最上面取一个盘子来用，而不是从最下面取一个盘子。为什么呢？因为这些盘子是“后放上去的先拿出来”。这其实就是我们今天要介绍的数据结构 —— 栈（Stack）。]]></description><category></category></item><item><title><![CDATA[C/C++数据结构之循环链表]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/150694225</link><guid>https://blog.csdn.net/hope_wisdom/article/details/150694225</guid><author>hope_wisdom</author><pubDate>Sun, 24 Aug 2025 08:27:18 +0800</pubDate><description><![CDATA[音乐播放软件一般都提供了重复播放的功能，这意味着：当播放列表中的最后一首歌曲播放完毕后，自动跳转至第一首歌曲继续播放。这种功能可以通过循环链表来轻松实现，其中每首歌曲代表链表中的一个节点。可以看到，循环链表非常适合需要重复访问元素的场景，比如：循环队列、时间轮等。]]></description><category></category></item><item><title><![CDATA[C/C++数据结构之双向链表]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/150143117</link><guid>https://blog.csdn.net/hope_wisdom/article/details/150143117</guid><author>hope_wisdom</author><pubDate>Sun, 10 Aug 2025 10:44:44 +0800</pubDate><description><![CDATA[想象一下一列火车，每节车厢就像双向链表中的一个节点。每节车厢都有前后两个连接点，通过这些连接点，车厢相互连接形成整列火车。我们可以从任意一节车厢出发，向前或向后移动到相邻的车厢，这与双向链表支持双向遍历的特点非常相似。]]></description><category></category></item><item><title><![CDATA[C/C++数据结构之单向链表]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/149478344</link><guid>https://blog.csdn.net/hope_wisdom/article/details/149478344</guid><author>hope_wisdom</author><pubDate>Sun, 20 Jul 2025 09:31:21 +0800</pubDate><description><![CDATA[单向链表是由一系列节点组成的线性集合，每个节点包含两个部分：一部分是存储数据的元素，另一部分是指向下一个节点的指针。与前面介绍的数组不同，单向链表中的元素并不是连续存储在内存中的，而是通过指针相互连接起来。
公司内部的报销审批流程，与单向链表比较类似。员工提交报销申请后，会先后由组长、部门主管审批，最后由财务审核。这是一个典型的单向流程链，每个环节只关心“下一步该交给谁”，而不关心“上一步是谁处理的”。]]></description><category></category></item><item><title><![CDATA[C/C++数据结构之多维数组]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/149309636</link><guid>https://blog.csdn.net/hope_wisdom/article/details/149309636</guid><author>hope_wisdom</author><pubDate>Sun, 13 Jul 2025 14:27:35 +0800</pubDate><description><![CDATA[多维数组，实际上就是“数组的数组”。最常见的是二维数组，就像一个表格，拥有行和列。而三维数组则可以想象为多个这样的表格堆叠起来形成的一个立方体。依此类推，我们可以构建四维、五维甚至更高维度的数组。]]></description><category></category></item><item><title><![CDATA[C/C++数据结构之动态数组]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/148998994</link><guid>https://blog.csdn.net/hope_wisdom/article/details/148998994</guid><author>hope_wisdom</author><pubDate>Sun, 29 Jun 2025 15:51:38 +0800</pubDate><description><![CDATA[与前一篇文章中介绍的静态数组不同，动态数组允许我们在运行时根据需要调整其大小。这意味着，数组元素的个数不是在编译时就固定的，而是可以在运行时指定。另外，我们还可以在程序执行过程中动态地添加或删除元素，而无需预先确定数组的最大容量。这种灵活性，使得动态数组非常适合用于那些数据量不确定或会随时间变化的场景。]]></description><category></category></item><item><title><![CDATA[C/C++数据结构之静态数组]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/148831528</link><guid>https://blog.csdn.net/hope_wisdom/article/details/148831528</guid><author>hope_wisdom</author><pubDate>Sun, 22 Jun 2025 19:34:14 +0800</pubDate><description><![CDATA[静态数组是C/C++中一种基础的数据结构，它允许用户在编译时便确定数组的大小，并分配固定数量的连续存储空间来存放相同类型的元素。静态数组的主要特点是：其大小在声明时就必须指定，且在其生命周期内保持不变。这也意味着，一旦定义了一个静态数组，就不能改变它的大小，或重新分配内存。]]></description><category></category></item><item><title><![CDATA[C/C++数据结构之漫谈]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/148673812</link><guid>https://blog.csdn.net/hope_wisdom/article/details/148673812</guid><author>hope_wisdom</author><pubDate>Sun, 15 Jun 2025 18:52:13 +0800</pubDate><description><![CDATA[学习数据结构并不是为了应付考试，而是为了理解计算机如何高效处理数据，并用它解决现实问题。就像学习烹饪时，我们不会只记住菜谱，而是要理解食材搭配和火候控制的逻辑。数据结构就是计算机世界的“烹饪之道”，掌握它，我们就能用代码“烹饪”出优雅而高效的解决方案。]]></description><category></category></item><item><title><![CDATA[实战设计模式之模板方法模式]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/148482000</link><guid>https://blog.csdn.net/hope_wisdom/article/details/148482000</guid><author>hope_wisdom</author><pubDate>Fri, 06 Jun 2025 20:47:25 +0800</pubDate><description><![CDATA[咖啡制作是现实生活中运用模板方法模式的一个典型例子：虽然不同种类的咖啡（比如：浓缩咖啡、拿铁、卡布奇诺等）有不同的制作细节，但它们共享一个通用的流程框架。这个框架包括一些基本步骤，比如：加热水、冲泡咖啡、倒入杯中、添加调料。通过使用模板方法模式，我们可以定义这个通用的流程，并允许具体的咖啡类型自定义某些步骤。]]></description><category></category></item><item><title><![CDATA[Linux系统编程之共享内存]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/148349272</link><guid>https://blog.csdn.net/hope_wisdom/article/details/148349272</guid><author>hope_wisdom</author><pubDate>Sat, 31 May 2025 09:34:59 +0800</pubDate><description><![CDATA[在Linux系统中，共享内存也是一种高效的进程间通信机制，允许两个或多个进程共享同一块物理内存区域。通过这种方式，不同进程可以直接访问和操作相同的数据，从而避免了数据的复制。由于数据直接在内存中共享，没有额外的数据传输过程，因此速度非常快。虽然共享内存本身提供了快速的数据交换方式，但它并不提供同步机制。这意味着，需要我们自己实现同步措施以防止竞态条件。]]></description><category></category></item><item><title><![CDATA[实战设计模式之访问者模式]]></title><link>https://blog.csdn.net/hope_wisdom/article/details/148200061</link><guid>https://blog.csdn.net/hope_wisdom/article/details/148200061</guid><author>hope_wisdom</author><pubDate>Sun, 25 May 2025 08:29:02 +0800</pubDate><description><![CDATA[访问者模式允许我们在不改变类的前提下，向已有类添加新的功能。简单来说，就是将算法与对象的数据结构进行分离的一种方法。在实际应用中，当我们需要对一组对象执行一些操作，而这些操作又需要随着需求的变化而不断变化时，访问者模式就显得尤为重要了。]]></description><category></category></item></channel></rss>