- 博客(16)
- 收藏
- 关注
原创 scanf_s与scanf的具体区别与用法
scanf_s的核心设计目标是通过显式指定缓冲区大小防止字符串输入溢出非字符串类型(%d%f等)用法与scanf一致;字符串(%s)和宽字符串(%ls)必须添加缓冲区大小参数;单个字符(%c)建议添加大小参数(通常为 1);缓冲区大小是数组总长度(包含\0),推荐用sizeof动态获取。合理使用scanf_s可显著提高程序的安全性,避免因输入失控导致的内存漏洞。
2025-10-23 09:44:06
1637
1
原创 哈夫曼树要点
/ 哈夫曼树节点结构char data;// 用于存储哈夫曼编码的结构char data;char* code;// 优先队列(最小堆)结构} MinHeap;// 创建哈夫曼树节点// 创建最小堆// 交换两个哈夫曼树节点*a = *b;*b = t;// 最小堆的堆化操作= idx)//应用递归思想。
2025-10-08 22:40:25
562
原创 有序单链表-陷阱解惑
是一种类型抽象的技巧,它将 "节点指针" 这一具体实现,包装为 "链表" 这一更高层次的概念,既简化了代码书写,又提高了可读性和可维护性,是 C 语言中实现数据结构时的常见做法。B.q = *L;中q不用类型匹配q是Node*(一级指针),*L也是Node*(一级指针),直接赋值 “地址” 是合法的;功能需求q的作用是 “临时存储节点地址”(遍历、保存待删除节点),不需要修改 “头指针的地址”,因此无需用解引用;若给q加,会导致类型不匹配(*q是Node类型,无法接收Node*类型的*L),且违背q。
2025-09-25 21:47:41
680
原创 栈的基本操作--细节“陷阱”
/ 应输出: 栈元素(从栈底到栈顶): 10 20 30。检查 “栈是否为空”,这是两个不同层面的判断,必须先确保指针有效,才能去访问结构体内部的成员。// 应输出: 入栈失败,栈已满或栈不存在。表示栈的容量(能存储的最大元素数),它是一个非负整数(初始化时至少为 1),不可能为。printf("获取栈顶元素失败,栈为空、栈不存在或指针无效\n");printf("出栈失败,栈为空、栈不存在或指针无效\n");时,外部的原指针仍然指向已经被释放的内存(成为 “野指针”),这是危险的。
2025-09-21 17:44:54
848
原创 分布式系统的具体知识介绍
分布式系统是 “用复杂度换能力” 的产物:通过网络连接多个节点,解决单节点的算力、存储、可靠性瓶颈,但也引入了网络不可靠、一致性难保证等挑战。其学习核心是 “理解 CAP 理论、掌握一致性协议、熟悉微服务 / 云原生架构”,并结合实际场景权衡 “一致性、可用性、性能”—— 没有 “完美的分布式系统”,只有 “适合业务的设计”。
2025-09-14 14:43:18
980
原创 计算机专业操作系统的具体内容和知识
这是理解 OS 的起点,核心是明确 “OS 是什么、做什么、为什么需要它”。本质:一组控制和管理计算机硬件 / 软件资源、合理组织计算机工作流程、为用户提供便捷使用接口的系统软件。地位:位于 “硬件层” 与 “应用程序层” 之间,是两者的中间件(如下图):计算机硬件 → 操作系统 → 系统调用 → 应用程序(如Chrome、VS Code) → 用户OS 的所有内容都围绕 “资源管理对 “CPU”:通过进程 / 线程调度,实现 “多任务并发”;
2025-09-13 21:23:38
1383
原创 C++多态基本使用总结
C++ 中的多态是面向对象编程的核心特性之一,它允许基类的指针或引用指向派生类对象,并根据实际对象类型调用相应的成员函数。
2025-08-21 10:04:36
465
原创 搜索与回溯算法的优化
这段代码通过 DFS 递归遍历所有 “选择 / 不选择” 元素的可能组合,寻找 “选择K个元素且和为s” 的组合。当已选够K个元素时,直接判断是否符合条件。当当前和超过s时,提前终止搜索。当找到符合条件的组合后,提前终止所有后续搜索。最终通过flag1判断是否存在这样的组合,通过cut统计搜索的总次数。模板型:背景引入:inter:abcoutput:abcacbbacbcacabcba数组已去重和排序。核心代码:string s;
2025-08-20 09:51:42
1028
原创 图的深度和广度优先搜索
深度优先搜索:1,先进后出(栈/递归) 2,标记,防止重复搜索 3,邻接点(邻接矩阵)广度优先搜索:1)先进先出,2)标记,防止重复搜索 3)邻接点(邻接矩阵)int vis1[7];//标记,防止重复搜索。s.push(0);index:状态 dep:阶段。
2025-08-18 10:48:56
489
原创 二叉搜索树的创建与遍历
int value;// 节点存储的值// 左子节点指针// 右子节点指针// 构造函数:初始化节点value = v;// 初始时左右子节点都为空通过last标记当前层末尾,nlast层序遍历(从左到右、从上到下访问节点)按层分隔打印(每层结束后自动换行)计算二叉树的高度(层数)时间复杂度仍为O(n)n为节点总数),额外空间复杂度为O(m)m为最大层的节点数)另一种求树高的方式:递归求树高这段代码是一个递归求二叉树高度的函数。
2025-08-15 10:20:42
953
原创 杨辉三角(递推与递归的对比)C++版
总结:这段代码用递归思想体现了杨辉三角的数学定义,但由于递归的特性,它更适合用于理解杨辉三角的数学原理,而不适合实际生成较大规模的杨辉三角。相比之下,前一段使用二维数组的迭代实现效率更高。这段代码的时间复杂度是 O (n²),空间复杂度也是 O (n²),适合用于生成小规模的杨辉三角。,用于存储杨辉三角的数据,最多可存储 100 行的杨辉三角(数组下标从 1 开始使用)。这段代码同样实现了杨辉三角的生成和打印功能,但采用了。函数负责读取输入、生成杨辉三角并打印结果。,表示要生成的杨辉三角的行数。
2025-08-14 09:42:31
1070
原创 归并排序(Merge Sort C++版)
核心代码:elsei < index;i++)这段代码实现了归并排序(Merge Sort)算法,采用自顶向下的分治策略。归并排序的核心思想是 "分而治之":将数组不断分割为更小的子数组,直到每个子数组只有一个元素(天然有序),然后逐步合并这些有序子数组,最终得到完整的有序数组。
2025-08-12 12:03:43
645
原创 快排(QuickSort C++版)
这是mySort类中的一个成员函数参数说明::要排序的整数向量(引用传递,避免拷贝)int l:当前排序区间的左边界索引int r:当前排序区间的右边界索引。
2025-08-12 10:19:45
431
原创 堆排序(Heap Sort C++版)
时间复杂度O(n log n)(构建堆为O(n),排序阶段为O(n log n)空间复杂度O(1)(原地排序,仅需常数级额外空间)。稳定性:不稳定(交换过程可能改变相等元素的相对顺序)。
2025-08-11 18:06:38
593
原创 桶排序(Bucket Sort C++版)
mySort:包含排序算法的类(此处为类的成员函数)。bucketSort:函数名,实现桶排序。:待排序的整数向量(引用传递,直接修改原向量)。时间复杂度O(n + k),其中n是元素总数,k是桶数量。最坏情况(所有数据分到一个桶):退化为O(n log n)(取决于桶内排序算法)。空间复杂度O(n + k),需要额外存储n个元素和k个桶。
2025-08-11 16:41:31
937
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅