- 博客(195)
- 收藏
- 关注
原创 基于哈夫曼树的 BMP 图片压缩系统实现
通过这个项目,我们不仅实现了一个实用的工具,更深刻理解了树形数据结构在信息论中的应用,以及位运算在处理底层数据流时的强大威力。可以准备一张 24 位真彩色的 BMP 图片进行压缩演示。展示压缩前后的文件属性对比。展示生成的可以正常打开,证明是无损压缩。您接下来需要我针对某一部分逻辑进行更深入的代码重构或细节补充吗?
2026-01-24 15:58:56
553
原创 Spark 课程核心知识点复习汇总
Spark核心概念包括弹性分布式数据集(RDD)、流处理(Spark Streaming)、PageRank算法和机器学习库(MLlib)。环境配置涵盖单机伪分布式集群搭建步骤,包括JDK安装、Spark解压配置和集群启动。Spark架构采用主从模式,包含Driver、Master、Worker等组件。脚本示例展示了spark-shell启动、HDFS数据上传、RDD创建与操作,以及HiveQL建表和DataFrame查询方法(where/filter/select)。全文提供了一套完整的Spark入门实践
2026-01-08 17:11:10
901
原创 进制转换3 学习笔记
摘要:本文探讨了M进制数转换为N进制数的问题。初始方案采用十进制中转法,通过将M进制数先转为十进制再转为N进制,但存在数值溢出风险。优化方案提出大数直接转换法,通过模拟手工除法避免溢出。核心知识点包括进制转换原理、字符与数值转换规则,以及边界条件处理。关键易错点包括数据类型选择、前导零处理等。建议小数据场景使用十进制中转法,大数据场景采用大数直接转换法,确保转换正确性。
2025-12-30 20:37:42
1206
原创 单链表 - 有序插入并输出学习笔记
本文介绍了如何用C语言实现单链表的有序插入与遍历输出。主要内容包括:单链表节点定义、创建节点、有序插入(处理空链表、头部插入和中间/尾部插入三种情况)、遍历输出(避免末尾空格)以及内存释放。关键点在于有序插入时的边界处理与内存管理,强调malloc与free必须成对使用。代码示例展示了从输入5个整数到输出有序链表的完整实现,并提供了命名规范、边界处理等优化建议,适合作为链表基础操作的参考范例。
2025-12-30 19:41:08
868
原创 让程序在读取到整数0时就终止循环
这段C程序实现了一个循环读取整数输入的功能,当输入0时程序终止。核心逻辑包括:1)使用scanf读取整数,返回值判断确保输入有效;2)检测到输入0时跳出循环;3)处理非数字输入等异常情况增强健壮性。程序通过feof/ferror检测输入流结束或错误,并提供了测试示例展示正常和异常输入的处理流程。关键点在于scanf返回值验证和0值判断,确保程序稳定运行。
2025-12-30 10:24:05
170
原创 C语言 qsort 函数实现学生成绩排序学习笔记
本文介绍了C语言中使用qsort函数实现多条件排序的方法。主要内容包括:1)qsort函数的基本用法和比较函数的编写规则;2)使用结构体存储学生学号和成绩;3)实现成绩升序、成绩相同时学号升序的多条件排序。文中提供了完整代码示例,并总结了常见错误及解决方案,如指针类型转换错误、变量名拼写错误等。最后通过测试样例验证了代码的正确性,并提出了按成绩降序排列和增加姓名字段排序的拓展思考。
2025-12-30 09:30:57
417
原创 学习笔记:查找数组第K小的数(去重排名)
题目要求查找数组中第K小的数(相同数值算同一排名)。解题思路包括:1)使用快速排序(qsort)对数组升序排序;2)遍历排序后的数组,通过比较相邻元素进行去重计数;3)当计数等于K时输出结果。关键点包括正确实现qsort的比较函数(防止整数溢出)、处理多组输入以及优化遍历过程。易错点涉及排序参数设置、比较函数实现和循环终止条件等。该算法时间复杂度为O(n log n),适用于题目给定的数据规模。
2025-12-29 19:29:51
775
原创 三类数组(整型、字符串、结构体)使用`qsort`排序的完整代码
本文介绍了使用C语言标准库qsort函数对三种常见数据类型进行排序的方法:1) 整型数组通过三目运算符避免溢出;2) 字符串数组通过转换指针类型后使用strcmp比较;3) 结构体数组通过访问成员变量实现多条件排序。重点在于正确转换指针类型和实现符合要求的比较函数,其中整型需防溢出,字符串需转换二级指针,结构体需指定排序成员。这三种方法涵盖了qsort的主要应用场景。
2025-12-29 19:27:10
346
原创 C语言随机数在考试中的核心考点
C语言随机数考点总结:1) rand()生成0~RAND_MAX的伪随机数,需包含stdlib.h;2) srand()设置种子,需用(unsigned int)time(NULL)且只调用一次;3) [a,b]区间随机数公式为rand()%(b-a+1)+a;4) 常见错误包括循环内调用srand()、种子类型未转换和范围计算错误。考试重点考察头文件、种子设置、范围计算和伪随机数特性,需注意强制类型转换和公式准确性。
2025-12-29 18:50:20
483
原创 幂次方取模
本文总结了快速幂取模算法的核心思想和实现要点。题目要求计算Xⁿ%233333,其中X,N≤10⁹,需采用O(logN)的快速幂算法。关键点包括:1)二进制分解指数减少计算次数;2)利用模运算性质防止溢出;3)正确处理边界条件。文中分析了常见错误(如变量未初始化、取模时机不当等),给出修正代码,并通过示例演示执行流程。该算法适用于大数幂运算、密码学等场景,需注意数据类型选择和取模时机。
2025-12-25 16:34:37
757
原创 十六进制转十进制
摘要: 本文详细解析了北京大学机试题"十六进制转十进制"的解题思路与实现方法。通过分析题目要求,提出了按位加权求和的核心算法,并给出了完整的C语言实现代码。重点修正了原代码中的浮点精度、数值溢出和输出格式等关键错误,总结了字符转换、多组输入处理和数据类型选择等知识点。文章还提供了测试用例验证和拓展思考,帮助读者深入理解进制转换问题。该解决方案高效可靠,适用于各类十六进制转十进制的场景。
2025-12-25 15:39:36
885
原创 首字母大写
该程序实现将输入字符串中每个单词的首字母大写。核心逻辑是: 用isword标记单词状态:1表示单词开头,0表示单词内部 遇到空白字符时置isword=1,标记下一个字符为单词开头 遇到非空白字符时,若isword=1且是小写字母则转大写,然后统一置isword=0 确保只有每个单词的第一个字母会被处理,后续字符保持原样 优化建议: 预计算strlen(str)避免循环重复计算 用strcspn去除fgets读取的换行符
2025-12-25 15:20:12
264
原创 isspace 函数
isspace是C标准库中用于检测空白字符的关键函数,识别空格、制表符、换行符等5种标准空白符。本文详细讲解其原型、识别范围、典型用法及注意事项,包括参数类型转换、EOF处理等常见问题,并演示如何结合字符串处理实现单词边界识别。该函数能简化代码,避免手动判断ASCII码,是字符串处理的必备工具。
2025-12-25 15:01:04
521
原创 %g的用法
C语言中的%g格式说明符用于浮点数输出,能自动选择%f或%e格式,并去除多余尾随零和无意义小数点。其核心特点是:根据数值大小自动优化输出形式(小数或科学计数法),默认保留6位有效数字,可通过%.ng指定精度。%g适用于需要简洁输出浮点数的场景,但需注意其精度表示有效数字而非小数位数,与%f不同。典型应用包括日志输出、处理不确定范围的数值以及固定有效数字位数的科学数据展示。
2025-12-23 10:57:08
1069
原创 fgets()函数的注意事项
本文详细解释了如何在C语言中使用fgets函数正确读取字符串数组(二维字符数组)。要点包括: 字符串数组本质是二维字符数组,如char originstr[M][N],表示M个字符串,每个最长N-1个字符。 fgets的第二个参数必须填单个字符串的缓冲区大小(N或sizeof(originstr[i])),不能填整个数组大小。 给出了正确使用示例,包括循环读取多个字符串、去除换行符等操作。 特别提醒了常见错误,如参数填整个数组大小会导致越界,填单个字符大小会导致无法读取输入。 对于动态分配的字符串数组,同样
2025-12-23 10:02:56
745
原创 如何将字母转换小写或者大写
摘要:C语言中通过toupper()函数实现字母大写转换,该函数定义于<ctype.h>,仅转换小写字母(a-z)为对应大写(A-Z),其他字符保持不变。使用时需注意将char强制转换为unsigned char以避免扩展ASCII码的负数问题。文章详细演示了单个字符转换和字符串整体转换的两种实现方式:直接修改原字符串或返回新字符串(需手动释放内存),并总结了常见错误如忘记包含头文件、字符串常量修改等问题,强调健壮性处理的重要性。
2025-12-22 10:15:52
474
原创 计算机内存访问:TLB、页表与Cache全解析
计算机系统中,TLB、页表、Cache和主存协同工作以优化内存访问效率。TLB缓存虚拟地址到物理地址的映射,命中时直接提供物理地址;未命中则需查询主存中的多级页表。物理地址确定后,Cache查询数据,命中则直接返回;未命中则访问主存。TLB和页表解决地址转换效率问题,Cache和主存解决数据读取效率问题。通过多层缓存设计(TLB作为页表缓存、Cache作为主存缓存),系统将高频访问的映射和数据存储在更快的组件中,显著降低访问延迟。TLB和Cache的命中率是性能关键,未命中时延迟可能增加10-100倍。优化
2025-07-01 14:44:40
1952
原创 回写缓存为何需要脏位?
摘要:在采用回写策略的Cache中,**脏位(Dirty Bit)**是核心标志位,用于标记Cache块是否被修改(1表示已修改需回写主存,0表示无需回写)。其核心作用是:1)避免未修改数据的冗余写回操作,提升性能;2)确保Cache与主存数据一致性。对比写直达策略(每次写操作同步更新主存,无需脏位),回写策略依赖脏位实现延迟批量回写。脏位与替换策略配合,仅在替换脏数据块时触发主存更新,兼顾效率与正确性。
2025-06-30 21:00:50
890
原创 主存地址与cache地址组成解析
摘要:主存地址由分区号、cache行号和块内地址组成;cache地址包含有效位、主存分区号和数据块副本(32B)。访问过程涉及载入数据块并更新有效位。平均访问时间(Ta)计算为cache命中率与cache时间的乘积加上主存访问时间与未命中率的乘积。主存系统效率为cache时间与Ta的比值。
2025-06-30 11:50:23
458
原创 共享栈如何降低单栈上溢风险
共享栈通过动态分配空间降低单个栈的上溢风险。由于栈空间通常不会完全填满,当一个栈接近满时,可以占用其他栈的剩余空间,避免立即发生上溢。这种灵活的空间分配机制使得极端情况下仍有缓冲余地,从而减少了单个栈因空间不足而溢出可能。
2025-06-29 19:58:47
296
原创 字位扩展-408真题
摘要:题目探讨如何快速将十进制8005转换为二进制并提取末两位,以及利用高位地址线区分芯片组块。分析表明,8005的二进制末两位可直接由其奇偶性确定为01,而高位地址线则用于芯片组块标识(如本题用高2位区分组块),简化了地址解码与芯片选择过程。核心思路是通过数值特性快速定位关键二进制位,优化硬件设计中的地址分配效率。
2025-06-29 19:33:33
232
原创 线性相关和线性无关
线性相关与线性无关是线性代数中的核心概念,用于描述向量组之间的关系。向量组线性相关指存在不全为零的系数使其线性组合为零向量,否则线性无关。关键结论包括:向量个数超过空间维度必相关;矩阵秩小于向量个数时相关;行列式为零的方阵向量组相关。线性无关组可通过扩展分量保持无关性,而相关组压缩分量仍相关。这些性质与矩阵秩、行列式、线性方程组及线性空间的基密切相关,是理解线性代数理论的基础。
2025-06-29 11:29:51
1320
1
原创 随机存储器有哪些,只读存储器又有哪些
存储器的分类与特性 存储器分为易失性(RAM)和非易失性(ROM)两大类。RAM包括SRAM(高速缓存用)和DRAM(内存条用),特点是读写速度快但断电后数据丢失。ROM包含多种类型,从不可修改的掩膜ROM到可反复擦写的闪存(Flash),用于BISO、U盘等长期数据存储。RAM好比草稿纸,ROM则像笔记本。二者的关键区别在于数据断电后是否保留以及修改的难易程度。
2025-06-28 20:34:21
505
原创 什么是集中刷新,分散刷新,和异步刷新
DRAM存储器需要定期刷新以防数据丢失,主要有三种刷新方式:集中刷新在固定周期内集中完成刷新,效率高但有死时间;分散刷新将刷新分散到每个存储周期,避免死时间但效率降低;异步刷新按计划间隔刷新,兼顾效率和稳定性,是现代DRAM的主流方式。三种方法各有利弊,异步刷新通过定时控制实现了性能与稳定性的平衡。
2025-06-28 20:26:54
834
原创 计算机网络 | 期末复习
奈氏准则:带宽(w Hz),在不考虑噪音的情况下,最大速率(2W)码元/秒:以分贝(dB)为度量单位。信噪比(dB)=10log10(S/N)将没有单位的S/N转换为单位为dB(必考,结合信噪比公式):C=Wlog2(1+S/N)(bit/s)速率=带宽*log2(1+S/N) 单位bit/s信道复用技术频分复用技术(FDM)Frequency Division Multiplexing时分复用技术(TDM)Time Division Multiplexing统计时分技术(STDM)
2024-07-03 20:17:30
1311
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅