- 博客(55)
- 收藏
- 关注
原创 牛客 - 二叉树的前序遍历
本文介绍了二叉树前序遍历的两种实现方法。前序遍历顺序为根节点→左子树→右子树。方法一使用递归,先访问根节点,再递归处理左子树和右子树。方法二采用非递归方式,利用栈结构,先将右子节点入栈再入栈左子节点,以保证出栈顺序符合前序要求。两种方法的时间复杂度均为O(n),其中n为节点数。递归方法空间复杂度取决于递归深度,非递归方法为O(n)。文章通过示例和代码展示了两种实现方式的具体操作步骤。
2025-08-05 22:38:44
310
原创 牛客 - 比较版本号
这篇文章比较了两个版本号字符串的大小。算法使用双指针遍历version1和version2,将每个修订号转换为整数后进行比较。主要步骤包括:跳过点号分隔符,读取数字段并忽略前导零,比较对应修订号的值。若某个版本号先遍历完,其后续修订号视为0。根据比较结果返回1(version1大)、-1(version2大)或0(相等)。该方法满足O(n)时间复杂度和O(1)空间复杂度的要求,高效地解决了版本号比较问题。
2025-08-03 00:20:43
784
原创 二叉树的创建和遍历操作(要求必须采用链式存储结构)
本文实现了一个基于二叉链表存储结构的二叉树操作程序。程序包含三个主要功能:1) 通过递归方法按先序优先方式构建二叉链表;2) 递归计算二叉树的深度;3) 按中序遍历顺序输出所有节点数据。用户输入节点序列('#'表示空节点)后,程序自动构建二叉树并输出其深度和中序遍历结果。该实现采用C++语言,通过递归算法高效地完成了二叉树核心操作,展示了递归在树结构处理中的应用优势。
2025-08-02 23:59:24
283
原创 图书管理系统的单链表存储(要求必须采用链式存储)
本文实现了一个基于带头结点单链表的图书管理系统。主要功能包括:1)从book.txt文件读取数据建立链表;2)输出链表数据;3)计算链表长度;4)插入和删除图书信息。系统采用C++编写,提供了菜单界面,支持图书信息的增删查改操作。链表节点存储图书的ISBN、书名和定价信息,通过文件I/O实现数据持久化,并提供了基本错误处理。该程序可作为图书管理系统的简单实现范例。
2025-08-02 23:58:29
150
原创 图的深度优先遍历(要求必须采用邻接矩阵存储结构完成)
该程序实现了无向图的邻接矩阵存储及深度优先遍历(DFS)功能。主要功能包括: 图的创建:用户输入顶点数和边数,初始化邻接矩阵,并建立顶点连接关系 邻接矩阵显示:以表格形式输出图的邻接矩阵表示 DFS遍历:从指定顶点(A)开始进行深度优先搜索 遍历序列输出:显示DFS的顶点访问顺序 程序使用邻接矩阵作为图的存储结构,通过递归方式实现DFS算法,并设置访问标记数组避免重复访问。最大支持20个顶点的图结构,采用字符型顶点标识和整型边权值。
2025-08-02 23:57:03
185
原创 队列的基本操作(采用链式存储结构)
本文实现了一个链式存储结构的队列,包含以下功能:1)定义队列节点和队列结构体;2)初始化空队列;3)从文件读取数据入队;4)执行出队操作;5)获取队头元素;6)计算队列长度。程序采用C++编写,通过菜单选择方式调用各功能模块,实现了队列的基本操作。测试数据存储在QNode.txt文件中,包含"A B C D"四个元素。该实现展示了链式队列的完整操作流程,包括入队、出队、获取队头和计算长度等功能,可作为队列数据结构的教学示例。
2025-08-02 23:55:39
137
原创 线性表的基本操作(要求必须采用顺序存储结构)
摘要:本文实现了一个顺序表的基本操作,包括创建、初始化、插入、删除、查找和合并等。程序从ListA.txt和ListB.txt文件读取数据建立两个线性表,输出表数据后,对表A进行插入元素6、删除原第3个元素8等操作,将修改后的表A和表B合并成有序表LC。测试结果显示合并后的有序表为2 3 5 6 6 8 9 11 11 14 20,验证了程序正确实现了顺序表的基本运算和有序合并功能。
2025-08-02 23:54:04
226
原创 病毒DNA检测
本文实现了一个病毒DNA检测程序,通过KMP算法匹配患者DNA与病毒DNA序列。程序从输入文件读取11组测试数据,将环状病毒DNA展开为线性序列后,依次检查所有可能的子串模式。每组数据匹配成功则输出"YES",失败则输出"NO"。算法采用改进的KMP模式匹配,通过预处理构建next数组优化匹配效率,能够有效检测病毒DNA是否存在于患者DNA序列中。程序实现了自动化批量处理,并将结果输出到指定文件。
2025-08-02 23:51:51
169
原创 特殊矩阵压缩存储
该程序实现了对称矩阵和下三角矩阵的两种存储方式及其存储密度计算。主要功能包括:1) 输入5×5矩阵数据并计算原始存储密度;2) 将特殊矩阵压缩存储为一维数组并计算压缩后的存储密度;3) 根据输入的行列号定位元素在压缩数组中的位置。对于对称矩阵,存储上三角部分并实现行列交换查找;下三角矩阵则直接存储下三角元素。通过比较两种存储形式的密度,验证了压缩存储能有效提高存储效率。程序采用菜单式交互界面,支持对称矩阵、下三角矩阵的选择操作,并显示压缩后的数组内容和元素查找结果。
2025-08-02 23:48:49
167
原创 牛客 - 旋转数组的最小数字
本文研究旋转数组中最小值的查找问题。旋转数组是将非降序数组前若干元素移至末尾形成的(如[3,4,5,1,2])。通过分析问题性质,发现最小值位于第二个递增子数组的首位。采用二分查找算法,通过比较中间元素与右边界元素来缩小搜索范围:当中间值大于右边界时搜索右半部,小于时搜索左半部。针对重复元素(如[3,100,200,3])的特殊情况,采用right--处理。该算法满足O(logn)时间复杂度和O(1)空间复杂度的要求,能高效定位旋转数组的最小值。
2025-08-02 23:29:08
371
原创 牛客 - 数组中的逆序对
本文介绍了计算数组中逆序对数量的两种方法。暴力法通过双重循环比较所有数对,时间复杂度为O(n²),适用于小规模数据。基于归并排序的分治方法将问题分解为子问题,在合并有序子数组时统计逆序对,时间复杂度优化至O(nlogn),空间复杂度为O(n),适用于大规模数据。两种方法都需对结果取模1000000007防止溢出。归并排序法是更优解,能高效处理10^5量级的数据规模。
2025-07-30 15:09:33
203
原创 牛客 - 寻找峰值
本文介绍了两种寻找数组峰值元素索引的方法。方法一是线性扫描法(O(n)),通过边界处理简化检查,遍历数组找到严格大于相邻元素的峰值。方法二是二分查找法(O(log n)),利用峰值趋势特性,通过比较中间元素与右侧元素决定搜索方向,最终收敛到峰值位置。两种方法均满足题目要求,其中二分法效率更高。示例显示两种方法都能正确返回任意峰值索引。
2025-07-29 18:21:53
807
原创 Qt连接MySql数据库
摘要:本文介绍了Qt连接MySQL数据库的两种方法。第一种方法使用QSqlDatabase直接操作,包括连接配置、SQL查询执行、批量插入数据等基本操作。第二种方法通过QSqlRelationalTableModel实现模型-视图编程,支持单表/多表操作,包含数据查询、排序、过滤、增删改等高级功能,并演示了如何将模型数据显示在表格视图中。两种方法都需先配置MySQL连接参数并引入必要的库文件。
2025-07-24 14:29:04
149
原创 Qt中的网络通信
UDP协议适用于实时性高、容忍丢包的场景(如视频流、在线游戏),核心类为QUdpSocket。TCP协议适用于需可靠传输的场景(如文件传输、数据库连接),其核心类为。
2025-07-21 13:02:44
236
原创 Qt中的多线程
简单任务用QThread复杂调度选;通信必用信号槽避免直接共享数据;同步工具按场景选,线程池提升性能;牢记“主线程管UI子线程干重活。
2025-07-20 17:40:00
449
原创 读取和写入json,xml文件
配置文件存储JSON:适合结构简单、需频繁读写的配置(如用户设置)。XML:适合复杂结构或需验证的场景(如SOAP通信、文档格式)。路径管理:外部文件路径用获取。版本兼容:Qt 6移除了,优先使用文本格式。
2025-07-15 18:13:36
212
原创 使用桌面设备与使用容器和布局
:使用 QDir::toNativeSeparators() 转换路径分隔符(如 C:\Users → C:/Users)Qt容器分为顺序容器和关联容器两类,均支持模板化存储,线程安全且比STL更易用。布局管理器自动排列控件,支持窗口自适应调整。基于哈希表,查找速度更快(O(1)平均时间复杂度),但无序。:支持 cc、bcc、attachment(附件路径):https://、http://、ftp:// 等。:需连续内存访问或存储大型自定义类型(非指针)
2025-07-09 20:57:05
681
原创 软件环境配置
这是我自己常用的一些工具的下载和安装方式,后续也会根据自己的使用进行添加,如果方便也可以留言,我将及时补充并更新你留言工具下载和安装方式。
2025-07-08 22:49:54
1632
原创 读和写入文件
本文介绍了Qt框架中的文件操作核心类及其使用方法,主要包括QFile、QTextStream和QDataStream三大类。QFile提供基础文件操作,QTextStream简化文本处理,QDataStream支持二进制序列化。文章详细讲解了文本文件的读写技巧、二进制文件的高级操作,以及大文件处理和异常安全等优化方案。最后通过性能对比表格,帮助开发者根据具体场景选择合适的方法。内容涵盖从基础操作到高级应用,是Qt文件处理的实用指南。
2025-07-08 20:19:44
334
原创 文件信息器
文件信息器是一种基于 Qt 框架开发的工具,通常用于管理和显示文件及目录的相关信息。/*QDir 类用来处理目录常用方法:QDir(QString path) : 实例化absolutePath() : 获取目录绝对路径dirName() : 获取目录相对路径exists(dirPath) : 判断目录是否存在mkdir(QString dirPath) : 创建目录rmdir(QString dirPath) : 删除目录。
2025-03-03 11:04:01
214
原创 牛客 - 二分查找-I
本文介绍了如何在无重复数字的升序数组中使用二分查找算法。通过初始化左右指针并不断调整查找范围,算法在O(logn)时间复杂度内完成查找。具体实现中,每次循环计算中间位置,比较目标值并调整指针范围,直到找到目标值或确定不存在。示例代码展示了完整的C++实现,适用于数组长度在0到2×10^5之间的情况。该算法满足时间复杂度和空间复杂度的要求,高效且易于理解。
2025-03-03 10:50:11
504
原创 牛客 - 删除有序链表中重复的元素-II
本文介绍了两种删除有序链表中重复元素的方法。方法一使用双指针技术,通过创建虚拟头节点简化边界处理,遍历链表时跳过所有重复节点,确保只保留出现一次的元素。该方法时间复杂度O(n),空间复杂度O(1)。方法二借助容器存储节点值进行去重,但未给出具体实现。主要考察对链表操作和双指针技巧的掌握,适用于需要删除所有重复节点的场景。
2025-02-18 19:55:54
166
原创 字体选择器
是一个标准的字体选择对话框,用户可以通过它选择字体的样式、大小、粗细等属性。/*QFontDialog 类能够弹出一个字体选择框静态方法:QFont 方法setFamily() \ family() : 设置 \ 获取 文本字体setPointSize() \ pointSize() : 设置 \ 获取 字体大小setBold(bool) \ bold() : 设置 \ 获取 文字是否加粗setItalic(bool) \ italic() : 设置 \ 获取 文字是否倾斜*/
2025-02-18 19:37:31
411
原创 牛客 - 删除有序链表中重复的元素-I
本文探讨了有序链表中删除重复元素的两种方法。方法一采用直接节点操作,通过遍历链表,当发现相邻节点值相同时跳过并删除重复节点,时间复杂度O(n),空间复杂度O(1)。方法二建议借助STL容器(如vector或set)存储节点值,利用unique()或remove()去重后重建链表,虽然代码简洁但空间复杂度较高。文章给出了方法一的完整C++实现,包含链表遍历、节点删除和内存释放等关键操作,适用于处理长度≤100的有序链表去重问题。两种方法分别体现了就地处理和容器辅助的不同解题思路。
2025-02-18 19:28:11
174
原创 颜色选择器
在Qt中,颜色选择器通常通过QColorDialog类实现。QColorDialog是一个标准对话框,用于让用户选择颜色,它提供了丰富的颜色选择功能,包括基本颜色选择器(如调色板和颜色轮)、自定义颜色输入区域以及预定义颜色列表。使用QColorDialog的基本方法显示对话框getColor():静态方法,显示颜色选择对话框并返回用户选择的颜色。如果用户取消选择,则返回默认颜色。示例代码// 设置背景颜色配置对话框:设置对话框的选项,例如是否显示颜色轮、是否允许用户自定义颜色等。
2025-02-12 17:11:24
539
原创 牛客 - 链表的奇偶重排
本文提出两种方法对链表节点按奇偶位置重排。方法一使用容器分别存储奇数位和偶数位节点后重新拼接;方法二更高效地通过创建奇偶头节点,遍历原链表时按位置将节点分别追加到奇偶链表,最后将偶链表接在奇链表后。代码实现上,方法二新建节点保留下原链表不变,时间复杂度O(n)满足要求,空间复杂度O(n)因新建节点所致。该方法思路清晰,通过一次遍历完成节点分类和拼接,适用于大规模链表处理。
2025-02-12 17:05:18
236
原创 文件选择框
*QFileDialog 类能弹出一个文件选择框静态方法:getOpenFileName(参数1, 参数2, 参数3, 参数4) : 打开文件getSaveFileName(参数1,参数2,参数3,参数4) : 保存文件参数1: 父组件参数2:标题栏文本参数3:打开的文件夹参数4:过滤的文件类型, 如果过滤多种文件类型,需要使用;;进行分割返回值: 选择的文件的绝对路径,如果选择 "取消" 按钮则返回空。
2025-02-10 09:56:40
255
原创 牛客 - 判断一个链表是否为回文结构
本文介绍了一种判断链表是否为回文结构的方法。回文链表要求正向和反向遍历时节点值序列完全相同。算法步骤如下:首先遍历链表,将所有节点值依次压入栈中;然后再次遍历链表,同时逐个弹出栈顶元素进行比较,若有不匹配则立即返回false,全部匹配则返回true。该方法利用栈的先进后出特性实现逆序比较,时间复杂度为O(n),空间复杂度为O(n),适用于节点数不超过10^5的链表。示例代码使用C++实现,通过创建栈存储节点值并完成对比验证。
2025-02-10 09:41:06
211
原创 消息对话框
QMessageBox 是一种消息对话框,能够对用户的操作进行提示。基础提示: QMessageBox::about(参数1, 参数2, 参数3)信息提示:QMessageBox::information(参数1, 参数2, 参数3, 参数4, 参数5)警告提示:QMessageBox::warning(参数1, 参数2, 参数3, 参数4, 参数5)错误提示:QMessageBox::critical(参数1, 参数2, 参数3, 参数4, 参数5)
2025-02-08 00:24:53
180
原创 牛客 - 单链表的排序
本文介绍了一种对无序单链表进行升序排序的方法。该方法首先遍历链表,将节点值存入vector容器中,然后使用标准库的sort函数对容器元素进行排序,最后按排序后的顺序重新为链表节点赋值。这种方法的时间复杂度为O(nlogn),空间复杂度为O(n),满足题目要求。代码实现简洁,通过两次遍历完成排序:第一次遍历收集数据,第二次遍历重新赋值。该方法适用于节点数较大的情况,能高效处理权值在[-10^9,10^9]范围内的链表排序问题。
2025-02-08 00:21:00
175
原创 创建模态框和非模态框
模态对话框:使用 exec() 方法显示,会阻塞用户与父窗口的交互,直到对话框关闭。非模态对话框:使用 show() 方法显示,不会阻塞用户与父窗口的交互,用户可以在对话框和父窗口之间自由切换。
2025-02-05 23:27:32
279
原创 牛客 - 链表相加(二)
本文介绍了两种方法来实现两个链表表示的整数相加。第一种方法使用vector存储链表值,反转后逐位相加并处理进位,最后再反转结果构建链表。第二种方法直接反转链表,从低位开始相加。两种方法都满足O(n)的时间和空间复杂度要求,适用于处理超长链表相加问题,其中方法一通过容器操作更直观,方法二通过链表反转更节省空间。示例输入[9,3,7]和[6,3]相加结果为[1,0,0,0],验证了算法的正确性。
2025-02-05 23:22:47
870
原创 牛客 - 两个链表的第一个公共结点
本文解决两个无环单向链表寻找第一个公共节点的问题。算法使用双指针法,分别遍历两个链表,当指针到达链表末尾时跳转到另一链表头部继续遍历。两指针相遇的节点即为第一个公共节点,若都遍历到链表末尾(null)则说明无公共节点。该方法时间复杂度O(n),空间复杂度O(1),通过让两指针遍历相同长度路径来确保相遇,巧妙地解决了链表长度不等的问题。输入示例展示了链表组装方式,代码实现简洁高效,正确处理了各种边界情况。
2025-01-22 21:44:11
202
原创 牛客 - 链表中倒数最后k个结点
本文介绍了一种查找链表中倒数第k个节点的算法。该方法首先遍历链表计算其长度,若链表长度小于k则返回空;否则,再次遍历链表到第(长度-k)个位置并返回该节点。算法时间复杂度为O(n),空间复杂度为O(1)。示例展示了输入{1,2,3,4,5}和2时返回节点4及其后续节点的情况,以及输入{2}和8时返回空的情况。该解法通过两次遍历实现,保证了线性时间复杂度且无需额外存储空间。
2025-01-22 21:26:45
461
原创 窗口栏组件
菜单栏 (QMenuBar):用于创建和管理顶部的菜单。工具栏 (QToolBar):用于创建快捷操作栏,可以显示在窗口顶部、底部或左右。状态栏 (QStatusBar):用于显示应用程序状态信息,通常位于窗口底部。中心部件 (setCentralWidget):主窗口的核心内容区域,用于展示应用程序的主要界面。铆接部件 (QDockWidget):可停靠的窗口,可以拖动并附加到主窗口的任意区域。// 菜单栏(菜单栏最多只能有一个)
2025-01-22 21:04:29
461
原创 信号和槽的重载
信号 和 槽 用于两个对象之间的通信,是 Qt 特有的消息传输机制。作用: 对一个部件进行操作时,另一个部件可以进行响应。信号函数 和 槽函数 通常位于某个类中信号函数用signals关键字修饰,槽函数用修饰signals 和 slots 是 Qt 在 C++ 的基础上扩展的关键字,专门用来指明信号函数和槽函数connect 用于链接 信号 和 槽,使其产生需要的效果。
2025-01-18 21:19:40
717
原创 牛客 - 链表中环的入口结点
本文介绍了一种在链表中检测环并找到环入口节点的方法。该方法使用快慢指针(Floyd算法),首先让快指针每次走两步,慢指针每次走一步,若存在环则两指针必定相遇。当两指针相遇后,将慢指针重置到链表头部,然后两指针以相同速度前进,再次相遇的节点即为环的入口节点。该方法满足空间复杂度O(1)和时间复杂度O(n)的要求。若无环则返回空值。文章通过示例说明了算法的具体应用场景和执行过程。
2025-01-18 20:59:42
285
原创 打包QT项目
创建一个空文件夹,存放需要打包项目的.exe文件。打开cmd,在QT的安装目录的版本号下的开发平台下的bin目录中找到windeployqt.exe,把这个路径拖拽到cmd中,空格,再把打包项目的.exe文件拖拽到cmd中回车。把windeployqt.exe文件夹下的libwinpthread-1.dll,libstdc+±6.dll和libgcc_s_dw2-1.dll再拖拽到创建的文件夹下。
2025-01-17 22:42:25
140
原创 Qt基本类型的区别
可以在任意位置插入和删除元素,但在中间位置进行插入和删除操作时的性能较差。基本单位是一个个的Unicode字符,提供了对字符串操作的方法,可以在任意位置插入和删除元素,而不会导致整个链表的重新分配和复制。的基本单位是一个个的字节,提供了对字节流操作的方法。是一个基于数组的动态数组类,支持高效的随机访问。类便于对数据进行存储和传输,在这样的场景时使用。是一个双向链表类,支持高效的插入和删除操作。适用于需要频繁插入和删除元素的场景。适用于需要频繁随机访问元素的场景。全部使用的是Qt的API。
2025-01-17 22:39:40
162
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅