- 博客(18)
- 收藏
- 关注
原创 括号匹配问题
本文提出了一种带嵌套顺序约束的括号匹配算法。在传统栈匹配基础上增加限制:多种括号嵌套时需遵循{→[→(→<的顺序。算法通过遍历字符串,遇到左括号时检查栈顶是否符合嵌套规则,遇到右括号时验证匹配性。最终栈为空则匹配成功。文中提供了C++实现代码,可判断给定括号字符串是否满足条件。
2025-12-20 15:36:19
151
原创 二叉排序树及二叉平衡树(数据结构)
摘要:本文系统介绍了二叉排序树(BST)和平衡二叉排序树(AVL)的概念、性质及实现。详细讲解了BST的有序性特点、基本操作(插入、查找、删除)的递归和非递归实现方法。针对AVL树,重点阐述了平衡调整的四种情况(LL、RR、LR、RL)及其旋转操作,并提供了完整的C++代码实现。文章通过示例数据演示了两种树的操作过程,旨在帮助读者深入理解这两种重要的数据结构及其应用。
2025-12-15 18:42:06
569
原创 二叉树(数据结构)
本文介绍了二叉树的基本概念、存储方式和遍历方法。主要内容包括:1)二叉树的五种类型(满二叉树、完全二叉树、完美二叉树、退化二叉树和平衡二叉树)及其性质;2)两种存储方式(顺序存储和链式存储)的C++实现代码;3)四种遍历方式(前序、中序、后序和层次遍历)的递归与非递归实现;4)线索化二叉树的原理和中序遍历线索化的实现。文章通过详细代码示例展示了二叉树的各种操作,为数据结构学习提供了实用参考。
2025-12-11 21:03:26
466
原创 哈夫曼树及哈夫曼编码实现(数据结构)
摘要:哈夫曼树是一种带权路径长度最短的二叉树,用于数据压缩编码。其构造方法包括:将叶节点按权值排序,每次合并权值最小的两个节点,直到形成完整树。哈夫曼树具有WPL唯一、只有度为0或2的节点等特点。哈夫曼编码通过遍历树生成,左子树为0,右子树为1。文中提供了C++实现代码,包括构建哈夫曼树和生成编码的过程,最终输出各字符对应的哈夫曼编码。
2025-12-01 13:36:14
377
原创 图的概念及存储方式(数据结构)
图是由顶点和边组成的非线性数据结构,可分为无向图和有向图。无向图的边无方向,有向图的边(弧)有方向。图的相关概念包括简单图、完全图、权值、子图等。存储方式主要有邻接矩阵(二维数组)、邻接表(顶点表+邻接边表)、边集数组(存储所有边信息)等。对于有向图还可使用十字链表,无向图可用邻接多重表。不同存储方式在空间和时间复杂度上各有优劣,邻接矩阵适合稠密图(O(n²)),邻接表适合稀疏图(O(n+m))。
2025-12-01 13:34:44
841
原创 并查集(数据结构)
并查集是一种处理不相交集合合并与查询的高效数据结构,支持合并(Union)和查找(Find)两种基本操作。初始实现采用树形结构,每个元素指向父节点,查找时需要遍历路径。该实现存在最坏时间复杂度O(n^2)的问题。优化方法包括:1)路径压缩-查找时让路径节点直接指向根节点;2)按秩合并-将较小树合并到较大树下。同时使用这两种优化可使时间复杂度降至接近线性。优化后的并查集广泛应用于连通性问题求解,如网络连接、图论算法等场景。
2025-11-20 16:26:09
358
原创 树(数据结构)
树是由n(n≥0)个节点组成的有限集合,包含根节点和叶节点。树的基本概念包括节点的度、层次关系(双亲、兄弟、祖先)以及树的存储结构(双亲表示法、孩子表示法、孩子兄弟表示法)。双亲表示法通过数组存储节点和父节点下标,查找父节点高效但子节点操作复杂;孩子表示法结合数组和链表,便于遍历子节点但查找父节点较慢;孩子兄弟表示法使用二叉链表结构,能高效转换多叉树为二叉树但不便查找父节点。文中提供了三种存储结构的C++实现代码示例。
2025-10-15 16:05:11
580
原创 队列(数据结构)
队列是一种遵循"先进先出"(FIFO)原则的线性数据结构,主要操作在队首和队尾进行。队列有两种实现方式:数组实现的循环队列和链表实现的链式队列。循环队列通过取模运算解决假溢出问题,使用队首和队尾指针进行操作,并预留一个存储空间区分空和满状态。链式队列则采用带头结点的单链表结构,通过队首和队尾指针实现入队和出队操作。两种实现方式都包含判空、判满、获取队首元素等基本操作,但循环队列大小固定而链式队列可动态调整。
2025-10-11 20:25:28
437
原创 栈(数据结构)
本文介绍了栈(Stack)这一遵循LIFO原则的线性数据结构,重点对比了顺序栈和链栈的实现方式。顺序栈基于数组实现,具有连续存储、操作速度快的特点,但需要提前分配容量;链栈基于链表实现,内存利用率高且无需预分配空间。文章详细给出了两种栈的C++代码实现,包括初始化、入栈、出栈、判空、获取栈顶元素等基本操作,并提供了完整的测试用例。两种实现方式各有优缺点:顺序栈操作效率高但可能浪费内存,链栈内存利用率高但操作相对复杂。
2025-10-02 18:23:33
263
原创 线性表(数据结构)
本文介绍了线性表的两种基本实现:顺序表和链表。顺序表采用连续内存存储,支持随机访问但插入删除效率低;链表通过节点指针连接实现动态存储,插入删除高效但需遍历访问。两种结构均实现了初始化、插入(头/尾/指定位置)、删除、打印等基本操作。顺序表使用数组存储,需处理内存分配;链表采用节点动态分配,需注意指针管理。文中提供了C++实现代码并演示了操作示例,展示了两种数据结构的特点及适用场景。
2025-09-17 22:41:53
261
原创 JLU C++上机实验第一题
该代码实现了一个多项式类 Polynomial,支持多项式的创建、输出、求值以及基本的算术运算(加、减、乘)。类中包含一个静态成员变量 cnt,用于记录当前创建的多项式数量。通过构造函数、析构函数和拷贝构造函数,cnt 能够动态更新。类还提供了多项式的格式化输出、求值函数以及运算符重载(+, -, *),使得多项式之间的运算更加直观。主函数中展示了如何使用该类进行多项式的创建、运算和输出,并验证了多项式的求值功能。最终,程序输出了多项式的运算结果以及当前创建的多项式数量。
2025-05-11 19:48:54
418
原创 质数筛(常见筛法详解及代码实现)
我们采用反证法的方式来理解,如果prime[j]是i的最小质因数,那么i*prime[j+1]这个数的最小质因数仍然是prime[j],而不是prime[j+1],如果在这里不break,那么计算机就会用prime[j+1]再次去筛i*prime[j+1]这个数,这样就违反了欧拉筛法的要求。举个例子,如果i=4,prime[j]=3,显然最小质因数是2,如果我们不break,那么对于12这个数,计算机会在之前已经筛完2*6(i=6,prime[j]=2)以后以4*3(i=4,prime[j]=3)的方式
2025-04-13 21:45:41
2092
原创 洛谷CF965D Single-use Stones
以此类推,我们最终可以得出题目要求能够过河的最大青蛙数就是某一个区间内能够被剩下的最少的青蛙数(因为当青蛙在上一个区间被挡住后,即使下一个区间能够跳过更多的青蛙,上一个区间的青蛙也过不去)。那么,如果以L为一个区间(即每次想办法让青蛙跳到最远的地方),这个区间上石头的个数即为该区间最多能跳过的青蛙个数(如果有某一个区间一只青蛙都跳不过去,那么最终能过河的青蛙个数也为0)。如果第二个区间只有5块石头,那么在这一区间就会有5只青蛙被挡住,能跳过去到下一个区间的青蛙个数就只剩下了5只。至此,这道题答案就出来了。
2025-04-07 20:36:16
1472
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅