
数据结构
简单的数据结构知识学习笔记
Echo-J
读万卷书,行万里路!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
KY46 | 二叉树
摘要:该程序实现了一个求解两个正整数n和m的最近公共祖先的算法。通过不断将较大的数除以2,直至两数相等,此时得到的数值即为所求。程序采用循环结构处理多组输入,每次输出n和m的最近公共祖先。算法利用了二分查找的思想,时间复杂度为O(log(max(n,m)))。原创 2025-07-05 16:15:46 · 112 阅读 · 0 评论 -
KY211 | 二叉树遍历
摘要:本文实现了一个二叉树重建及后序遍历程序。通过前序遍历字符串和中序遍历字符串,递归构建二叉树结构,然后进行后序遍历输出。程序首先读取前序和中序遍历序列,调用recover函数递归重建二叉树,其中根据根节点在中序序列的位置划分左右子树。最后通过postOrder函数实现后序遍历输出。该算法实现了二叉树的经典重建及遍历功能。原创 2025-07-05 15:52:23 · 113 阅读 · 0 评论 -
KY187 | 哈夫曼树
摘要:该程序使用优先队列(最小堆)实现霍夫曼编码的贪心算法。首先读取输入数据并存入最小堆,然后不断取出最小的两个元素相加,将结果重新放入堆中,同时累加每次合并的代价。最终输出所有合并代价的总和,即为构造霍夫曼树的最小总成本。该算法时间复杂度为O(nlogn),适用于解决合并石子等最小化合并代价的问题。原创 2025-07-05 15:07:36 · 114 阅读 · 0 评论 -
KY101 | 计算表达式
摘要:该程序实现了一个简单的表达式计算器,采用栈结构处理运算符优先级。程序读取用户输入的字符串表达式,通过数字提取函数和运算符优先级判断,使用两个栈分别存储数字和运算符。当遇到低优先级运算符时,先计算栈顶高优先级运算,最终输出表达式结果。主要功能包括数字提取、运算符优先级判断、基本四则运算等。原创 2025-07-05 13:33:19 · 88 阅读 · 0 评论 -
KY179 | 堆栈的使用
摘要: 该程序实现了一个栈的基本操作,包括压入(Push)、弹出(Pop)和查看栈顶元素(A)。用户输入操作次数n,随后输入n次操作指令。'P'指令压入数字,'O'弹出栈顶元素,'A'显示当前栈顶元素(若栈空则输出'E')。程序使用C++标准库的stack容器实现,通过循环处理所有操作指令,并根据不同指令执行相应操作,最后返回0表示程序正常结束。原创 2025-07-05 12:13:32 · 71 阅读 · 0 评论 -
KY128 | 简单计算器
该程序实现了一个简单的四则运算计算器,支持加、减、乘、除运算。主要功能包括:解析输入表达式字符串,处理数字和运算符,使用双栈结构(数字栈和运算符栈)实现运算优先级处理。程序从标准输入读取表达式,遇到"0"时终止,输出保留两位小数的结果。核心算法利用运算符优先级比较来决定运算顺序,通过栈结构实现了表达式求值功能。原创 2025-07-05 11:48:50 · 77 阅读 · 0 评论 -
KY24 | 剩下的树
摘要:该程序计算移除指定区间后的剩余树木数量。输入包括道路长度L和移除区域数M,随后输入M个区间的起始和结束位置。程序初始化一个数组表示所有树木存在(值为0),然后将移除区间内的树木标记为1。最后统计未被标记的树木数量并输出。主要功能是通过遍历区间更新树木状态,然后计算剩余数量。程序持续处理输入直到EOF。原创 2025-07-03 11:00:01 · 108 阅读 · 0 评论 -
KY28 | 谁是你的潜在朋友
该程序用于查找数组中每个元素的潜在朋友数量。程序首先读取整数n和m,然后读取n个整数存入数组p。通过统计每个数字出现的次数,对于每个元素,若出现次数减1为0则输出"BeiJu",否则输出次数减1的结果。程序利用数组books记录数字频次,通过遍历数组p输出每个元素的潜在朋友数量。主要功能是统计并输出数组中每个数字的重复出现次数(不包括自己)。原创 2025-07-03 10:32:30 · 99 阅读 · 0 评论 -
KY93 | Simple Sorting
该程序实现了一个归并排序算法,用于对输入的整数数组进行排序并去除重复元素。程序主要包含三个函数:merge()用于合并两个已排序的子数组,mergeSort()递归地将数组分成更小的子数组进行排序,main()函数处理输入输出。程序首先读取输入的整数个数n和数组元素,通过归并排序将数组排序后,输出时不重复的元素。核心算法时间复杂度为O(nlogn),空间复杂度为O(n)。程序使用了分治策略,适合处理大规模数据排序问题。原创 2025-07-02 20:53:14 · 124 阅读 · 0 评论 -
KY135 | 统计同成绩学生人数
该程序统计输入数组中特定数值的出现次数。首先读取数组长度n,随后读取n个整数存入数组,再读取目标分数score。通过遍历数组,程序统计与score相等的元素个数并输出结果。程序采用循环结构,可以处理多组输入数据,直到输入结束。代码简洁高效,使用固定长度数组存储数据,适合处理不超过1000个元素的输入情况。原创 2025-07-02 20:32:52 · 74 阅读 · 0 评论 -
KY221 | 打印日期
该程序实现将给定年份和天数转换为对应的日期格式。主要功能包括:1)判断闰年函数isLeapyear;2)日期转换函数is_month_day,通过遍历月份数组计算对应月份和日期;3)主程序读取输入的年和天数,调用转换函数并格式化输出日期(自动补零)。程序处理闰年2月特殊情况,支持连续输入多组数据,输出格式为YYYY-MM-DD。核心算法是通过累计天数确定月份边界,适用于日期计算相关应用场景。原创 2025-07-02 20:24:29 · 78 阅读 · 0 评论 -
KY18 | 今年的第几天?
该程序实现计算给定日期是该年第几天的功能。主要包含两个函数:isLeapyear()判断闰年,is_today()计算天数。主程序通过循环读取输入的日期(年、月、日),调用is_today()计算并输出结果。is_today()函数通过遍历月份数组累加天数,对2月特别处理闰年情况。程序能正确处理不同年份(包括闰年)的日期转换,输出该日期在当年的天数序号。原创 2025-07-02 19:39:01 · 110 阅读 · 0 评论 -
KY107 | Day of Week
这篇C语言程序实现了计算给定日期对应星期几的功能。主要包含两个函数:isLeapyear()判断闰年,is_week_day()计算星期。程序通过累加从公元1年到目标年份的总天数,加上月份和日期的天数,最后对7取模得到星期几。输入格式为"日 月 年"(如"1 January 2000"),输出对应的星期名称。关键点包括闰年判断、月份字符串匹配和天数累加计算。程序采用模块化设计,使用字符串数组存储月份和星期名称,提高代码可读性。原创 2025-07-02 19:27:58 · 95 阅读 · 0 评论 -
KY110 | 日期差值
【摘要】该程序计算两个日期之间的天数差。程序包含两个主要函数:isLeapyear判断闰年,compute_days计算从公元0年开始到指定日期的总天数。主函数获取两个日期输入,分别计算总天数后求差值加1,输出最终结果。程序采用数组存储各月份天数,并考虑了闰年2月天数的特殊处理。原创 2025-07-02 18:48:44 · 210 阅读 · 0 评论 -
KY167 | 字符串内排序
摘要:本文展示了一个C语言实现的字符串归并排序程序。程序定义了一个最大长度为200的字符串数组,通过递归调用mergeSort函数将字符串拆分为更小的子数组,然后使用merge函数合并排序。主函数读取输入字符串,调用排序函数处理后输出结果。文章完整呈现了归并排序算法在字符串排序中的应用,包括分治策略、合并操作和递归实现等关键步骤。原创 2025-07-02 16:26:44 · 82 阅读 · 0 评论 -
KY144 | EXCEL排序
该程序实现了一个学生信息排序系统,能够根据学号、姓名或成绩对学生数据进行排序。程序采用归并排序算法,支持三种排序方式:1)按学号升序;2)按姓名升序(姓名相同则按学号);3)按成绩升序(成绩相同则按学号)。输入格式为n(学生数量)和c(排序方式),随后输入n条学生记录(学号、姓名、成绩)。程序输出排序后的结果,并支持多组数据输入。该实现具有高效稳定的排序性能,适合处理大规模数据(最大10万条记录)。原创 2025-07-02 16:09:54 · 416 阅读 · 0 评论 -
KY210 | 特殊排序
【代码】KY210 | 特殊排序。原创 2025-07-02 10:59:12 · 86 阅读 · 0 评论 -
16. 最接近的三数之和
摘要:本文提出了一种解决「最接近的三数之和」问题的高效算法。通过先对数组进行排序,然后使用双重指针法遍历数组,寻找与目标值最接近的三个数之和。算法时间复杂度为O(n²),通过维护最小差值来优化搜索过程。该方法适用于每组输入只有唯一解的情况,能够快速返回最接近目标值的三个数之和。原创 2025-07-02 09:58:40 · 306 阅读 · 0 评论 -
KY1 | 成绩排序
摘要:该程序实现了一个基于归并排序的学生成绩排序系统。程序通过读取输入的学生姓名和成绩数据,根据用户指定的排序方式(1为降序,其他为升序)进行排序,并输出结果。主要包含merge()和mergeSort()两个核心函数,前者负责合并两个有序子数组,后者实现递归分治的归并排序算法。程序支持多组数据输入,每行输出排序后的学生姓名和成绩,具有较好的可扩展性和稳定性。原创 2025-07-02 09:58:14 · 109 阅读 · 0 评论 -
KY209 | 排序(归并排序)
该程序实现归并排序算法,主要包含三个函数:merge()用于合并两个有序数组,mergeSort()递归分割数组并调用merge()进行排序,main()处理输入输出。程序首先读取整数n和n个数据,通过归并排序对数组升序排列后输出结果。归并排序采用分治策略,时间复杂度为O(nlogn),使用辅助数组完成合并过程。程序循环读取输入直到EOF,每次处理一组数据并输出排序结果。原创 2025-07-01 11:01:01 · 82 阅读 · 0 评论 -
15. 三数之和(力扣)
该代码实现了求解三数之和的算法。主要思路是:1) 先对数组进行排序;2)使用双指针法遍历数组,寻找满足nums[i]+nums[left]+nums[right]=0的三元组;3)跳过重复元素以避免重复解。算法时间复杂度为O(n²),空间复杂度为O(n²)。关键点包括:排序预处理、双指针移动策略、以及处理重复元素的技巧。函数返回所有不重复的三元组,并通过指针参数返回结果数组的大小和列宽信息。原创 2025-06-22 13:28:34 · 95 阅读 · 0 评论 -
11. 盛最多水的容器(力扣)
摘要:该算法解决容器盛水问题,采用双指针法从两端向中间遍历。每次移动较短的边,计算当前区域面积并更新最大值。通过比较左右指针的高度,总是移动较小的指针以寻找可能的更大高度,从而在宽度减小时可能获得更大容量。时间复杂度为O(n),空间复杂度为O(1)。核心在于理解移动较短指针的策略可以优化搜索过程。原创 2025-06-22 09:05:14 · 318 阅读 · 0 评论 -
10. 正则表达式匹配(力扣)
摘要:本文解析正则表达式匹配的动态规划实现。核心是构建二维数组dp[i][j]表示字符串s[0..i-1]与模式p[0..j-1]的匹配状态。重点处理三种情况:(1)直接字符匹配时继承前序状态;(2)遇到''时考虑零次或多次匹配前驱字符;(3)其他情况设为不匹配。特别处理''的两种情况:dp[i][j-2]表示忽略前驱字符,当'.'或字符匹配时还需考虑dp[i-1][j]的多次匹配情况。初始化时需单独处理模式中'*'与空字符串的匹配关系。原创 2025-06-21 14:24:47 · 223 阅读 · 0 评论 -
8. 字符串转换整数 (atoi)(力扣)
这篇文章介绍了一个C语言实现的字符串转整数函数myAtoi()。函数首先去除输入字符串的前导空格,然后处理正负符号。核心转换功能由辅助函数aa()完成,它会提取数字字符并转换为长整型。主函数myAtoi()会检查转换结果是否在32位有符号整数范围内(-2147483648到2147483647),若超出则返回对应的边界值。该方法实现了基本的字符串到整数的转换,并考虑了数值范围限制的特殊情况。原创 2025-06-21 09:43:44 · 115 阅读 · 0 评论 -
7. 整数反转
摘要:该代码实现了一个整数反转函数,通过循环将输入整数x逐位反转。在反转过程中检查溢出情况,如果中间结果超过32位有符号整数范围(±214748364),则返回0。最终返回反转后的整数out。时间复杂度为O(n),空间复杂度为O(1)。原创 2025-06-20 17:03:53 · 413 阅读 · 0 评论 -
6. Z 字形变换(力扣)
本文展示了一个将字符串按Z字形排列后按行输出的C语言解决方案。函数通过计算字符位置与行号的对应关系,将原字符串重新排列。当行数为1时直接返回原字符串。算法使用双循环遍历字符串,通过模运算确定每个字符对应的行号,并按行号顺序收集字符。该方法时间复杂度为O(n^2),空间复杂度为O(n),适用于中等长度字符串的Z字形变换需求。原创 2025-06-20 16:18:30 · 76 阅读 · 0 评论 -
4. 寻找两个正序数组的中位数(力扣)
【代码】4. 寻找两个正序数组的中位数(力扣)原创 2025-06-20 14:52:18 · 422 阅读 · 0 评论 -
3. 无重复字符的最长子串(力扣)
【代码】3. 无重复字符的最长子串(力扣)原创 2025-06-20 14:16:23 · 510 阅读 · 0 评论 -
BM20 | 数组中的逆序对 题解
【代码】BM20 | 数组中的逆序对 题解。原创 2025-06-11 16:55:13 · 117 阅读 · 0 评论 -
BM19 | 寻找峰值 题解
【代码】BM19 | 寻找峰值 题解。原创 2025-06-11 16:33:19 · 330 阅读 · 0 评论 -
BM18 | 二维数组中的查找 题解
【代码】BM18 | 二维数组中的查找 题解。原创 2025-06-11 16:20:28 · 94 阅读 · 0 评论 -
牛客 | BM1 二分查找-I 题解
【代码】牛客 | BM1 二分查找-I 题解。原创 2025-06-11 15:40:37 · 128 阅读 · 0 评论 -
牛客 BM16 删除有序链表中重复的元素-ii
【代码】牛客 BM16 删除有序链表中重复的元素-ii。原创 2025-06-10 14:47:04 · 110 阅读 · 0 评论 -
BM12 单链表排序
【代码】BM12 单链表排序。原创 2025-06-09 12:44:26 · 105 阅读 · 0 评论 -
算法题——合并 k 个升序的链表
【代码】算法题——合并 k 个升序的链表。原创 2025-06-07 16:49:44 · 96 阅读 · 0 评论 -
数和二叉树——二叉树
如下代码实现了二叉树的建立、二叉树的前序遍历、中序遍历、后序遍历的递归与非递归遍历、二叉树的层次遍历、求树的高度、结点数、叶子结点数。1、定义:度原创 2023-12-19 13:32:01 · 409 阅读 · 1 评论 -
树的存储——双亲存储、孩子链表存储、孩子兄弟
是否需要添加,是根据调试的实际情况决定的。原创 2023-12-17 19:26:13 · 700 阅读 · 1 评论 -
数据结构——队列
1、定义:插入在队尾,删除在队尾。1) EnQueue入队。2) DeQueue出队。1)循环(顺序)队列。原创 2023-12-17 16:32:26 · 435 阅读 · 1 评论 -
数据结构笔记——栈
/ ls为栈顶指针,长得很像链表,但是无头。1、定义:插或删只能在栈顶的受限的线性表。6、 栈的链式存储结构(栈的链式实现)// ls -> ^ 空栈。4、顺序栈结构体定义。原创 2023-12-17 16:29:21 · 386 阅读 · 1 评论