- 博客(14)
- 收藏
- 关注
原创 位运算详解
本文介绍了位运算的基础知识和常见操作。主要包括:1)6种基本位运算(左移、右移、取反、与、或、异或)的定义和特性;2)位操作技巧:判断某位值、修改特定位、提取最右侧1(lowbit)、消除最右侧1的方法;3)异或运算的特殊性质(如a^a=0、交换律等)。文中通过具体示例和公式说明了这些位运算的应用场景和实现原理,为理解和使用位运算提供了基础指导。
2025-09-20 11:29:59
207
原创 Linux权限
摘要:本文系统阐述了Linux操作系统中的权限机制。首先介绍了shell作为用户与内核交互的中介作用,解释了其运行原理。文章重点分析了Linux权限的本质,即"权限=人+文件属性",详细说明了用户分类(root和普通用户)、文件属性(r/w/x)以及角色管理。同时讲解了权限修改的两种方法、文件类型识别和特殊权限设置。最后讨论了三个关键子问题:目录访问权限、文件默认权限设置(umask掩码)和粘滞位的作用。这些内容全面展示了Linux多用户环境下如何通过完善的权限机制实现系统安全和管理。
2025-09-13 14:49:16
944
原创 二分算法详解
本文系统介绍了二分查找算法的核心思想与应用方法。首先阐述二分算法基于二段性的查找原理,指出其通过舍弃无效区间提升效率。随后详细讲解朴素二分模板,包括算法细节、适用条件及代码实现。重点剖析了二分查找左右端点的进阶应用,分别给出左端点二分和右端点二分的具体实现方案,包括中值计算、区间调整等关键细节,并提供了对应的代码模板。作者强调二分算法的核心在于识别问题的二段性特征,而非简单的单调性,并指出左右端点二分的关键区别在于中值计算方式的不同。全文通过具体题目示例,完整呈现了从暴力解法到二分优化的解题思路演进过程。
2025-08-13 15:03:18
539
原创 红黑树的模拟实现
红黑树是一种自平衡二叉搜索树,其名称源于节点非红即黑的特性。它的平衡性虽不及AVL树,但通过四条规则确保相对平衡:1)节点颜色为红或黑;2)根节点为黑;3)红色节点的子节点必为黑;4)任意节点到叶子的路径含相同数量黑节点。这些规则保证了最长路径不超过最短路径的两倍,维持O(logn)的查找效率。实现时通过变色和旋转(单旋/双旋)处理插入后的不平衡情况,核心代码展示了节点插入、颜色调整和旋转操作。红黑树在保持高效性的同时,降低了完全平衡的维护成本,广泛应用于STL等库中。
2025-07-08 16:19:36
827
原创 C++11之右值引用和移动语义
本文详细介绍了C++11中左值、右值及其相关概念: 左值右值概念:左值是可持久存在的变量表达式,右值是临时对象或字面量。传统理解将左值视为赋值符号左侧是错误的。 左值引用和右值引用:左值引用只能绑定左值,右值引用只能绑定右值。通过move函数可将左值转为右值。 引用延长生命周期:右值引用和const左值引用都能延长临时对象的生命周期。 移动语义:通过移动构造和移动赋值实现资源"窃取",避免不必要的拷贝,提高效率。 完美转发:使用forward保持参数的原始属性,实现参数的完美传递。 类型
2025-06-28 11:12:01
678
原创 封装unordered系列容器
本文详细介绍了如何基于哈希桶实现unordered_map和unordered_set容器。主要内容包括:1) 容器基本架构设计,通过MapKeyOfT和SetKeyOfT仿函数区分键值;2) 普通迭代器实现,重点解决类相互依赖问题和operator++的三种遍历情况;3) const迭代器实现时需注意模板参数顺序和const修饰问题;4) 通过改造insert返回值实现unordered_map的[]运算符;5) 最终封装完成的unordered_map和unordered_set代码。实现过程中特别强调
2025-06-25 10:12:40
561
原创 Hash表模拟实现——链地址法
本文探讨了哈希表中解决冲突的两种方法:链地址法和开放定址法。链地址法将冲突元素存储在链表或红黑树中,具有处理冲突高效、不需频繁扩容的优点,但空间开销较大;开放定址法则通过占用其他位置解决冲突,空间利用率高但可能影响查询效率。重点介绍了链地址法的实现,包括插入、查找和删除操作的逻辑,并提供了封装后的代码实现。文中强调了析构函数的重要性以防止内存泄漏,并详细说明了扩容的优化处理。代码实现考虑了字符串特化的哈希函数处理,为哈希表提供了完整的解决方案。
2025-06-23 19:12:25
439
原创 set和map的封装
本文分析了STL中set和map的实现原理,它们都是基于红黑树(RBTree)实现的。文章首先探讨了set和map在模板参数上的区别,set使用单一键类型,而map使用key-value对。接着详细介绍了红黑树迭代器的实现,包括operator++和operator--的逻辑,以及普通迭代器和const迭代器的封装。最后讲解了map中operator[]的实现机制,它通过insert接口返回pair<iterator,bool>来判断是否存在该元素,从而实现对元素的访问和插入操作。整体框架展示了如何通过模板
2025-06-19 18:11:34
964
原创 AVL树的模拟实现
AVL树得名于它的发明者G.M.Adelson-Velsky和E.M.Landis是两个前苏联的科学家,他们在1962 年的论文《Analgorithmfortheorganizationofinformation》中发表了它。
2025-06-15 20:52:46
1040
原创 深入STL之set_map初识
本文摘要:文章详细介绍了C++中的关联式容器set和map。set是基于红黑树的key结构容器,map则是key/value结构。首先区分了序列式容器和关联式容器的概念,然后重点讲解了pair类及其使用。通过对set的insert、find、erase、count等接口的模拟实现,展示了其操作方法,并比较了set和multiset的区别。最后解析了map特有的[]操作符底层实现原理,说明其通过insert返回pair对象来访问value的特性。文章通过具体代码示例,帮助读者深入理解这两种重要容器的使用方式和
2025-06-01 16:53:37
752
原创 C++二叉搜索树的模拟实现
二叉搜索树(BST)是一种特殊的二叉树,其左子树的所有节点值小于根节点,右子树的所有节点值大于根节点。BST的主要应用场景是高效搜索,其搜索时间复杂度为O(log n),适用于大规模数据的快速查找。BST支持插入、查找和删除操作,但不支持修改节点值,以免破坏树的结构。BST的变种如AVL树和红黑树进一步优化了平衡性,提升了查询效率。BST的典型应用包括停车场管理系统、拼写检查、词典翻译和单词统计等。通过模拟实现BST,可以更好地理解其插入、查找和删除操作的逻辑。
2025-05-20 15:11:42
854
原创 深入学习C语言之编译链接
C语言程序的执行涉及翻译环境和运行环境。翻译环境将源代码转换为可执行程序,包括预处理、编译、汇编和链接四个步骤。预处理处理宏定义和头文件,编译进行词法、语法和语义分析生成汇编代码,汇编将汇编代码转换为机器指令,链接解决多文件间的调用问题。运行环境负责程序的加载和执行,包括内存分配、堆栈管理和程序终止。这两个环境共同确保C语言程序从源代码到最终执行的完整流程。
2025-05-17 14:02:14
675
原创 算法学习之路——快慢指针
Floyd判圈算法,又称龟兔赛跑算法,是一种用于检测链表中是否存在环的算法。该算法通过设置两个指针,一个快指针(兔子)和一个慢指针(乌龟),在链表中移动。如果链表无环,快指针将到达链表尾部;如果有环,快指针最终会追上慢指针,证明存在环。算法还提供了找到环入口的方法,即让两个指针以相同速度移动,再次相遇的点即为环的入口。代码实现中,通过不断移动快慢指针,直到它们相遇或快指针到达链表尾部,来判断链表是否带环。此算法简单高效,广泛应用于链表环检测问题。
2025-05-15 22:05:38
627
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅