- 博客(12)
- 收藏
- 关注
原创 性能的平衡——红黑树
为了追求效率,红黑树不似AVL树那般完全平衡,前辈们选择牺牲部分搜索效率以换取整体性能的提升。但总的来讲,红黑是比AVL树更简单,但也比其更抽象,其最关键的点在与如何对节点的颜色修改或对节点进行旋转,以保证各路径黑节点总数的一致,而这个关键点的难点又在于理解u节点为黑时的情况——这又得对其下抽象子树进行理解。
2024-12-10 00:40:59
291
原创 平衡二叉搜索树——AVL树
本文以非平衡二叉树作为切入,主要聚焦AVL树的节点旋转进行讨论分析,以具象的代数思维理解抽象的更新思想,在梳理逻辑的同时呈现具体实现
2024-12-02 05:17:46
778
原创 进程地址空间与写时拷贝
本文以一段简短的C代码为引入,简要介绍进程地址空间,突出了其为进程与进程间数据代码解耦的便利性,又以其引出写时拷贝这项在操作系统中不可或缺的技术
2024-10-10 23:15:28
438
原创 环境变量与进程控制
各种shell指令本质上也是可执行程序,但不需要加上./即可执行(./是为了指明路径,在当前目录下寻找可执行程序)下有两种不加./即可执行程序的方法——1.将这个程序移至/usr/bin/下(可能会污染指令库,不建议)2.修改默认路径,也就是环境变量PATH,指令为——export PATH=该程序所在绝对路径(会覆盖原有路径,致使shell瘫痪)export PATH=$PATH:该程序所在绝对路径。
2024-10-10 21:47:46
517
原创 进程与多进程实现
程序是什么,进程是什么,二者的区别又是什么——程序是存放在磁盘的可执行文件——也就是一系列的指令集合,而进程可以说是被加载到内存的程序,是程序的一次执行过程——同一程序可能会有多个进程执行。也就是说程序是静态的,进程是动态的。进程的组成——进程是由内核数据结构和进程对应的磁盘代码组成的。在Windows下,这个内核数据结构是PCB(Process Control Block);在Linux下,这个内核数据结构是task_struct,本文围绕Linux讨论。
2024-10-09 20:19:16
915
原创 集合论与位运算的结合
—如:现有集合(集合中元素皆为非负整形)A = {1,2,3},那么这个集合就可以用二进制1110₂来表示——集合中的元素n如果存在,其对应二进制的(n - 1)位就为1,不存在就为0。如果要对两个哈希表取交集,这就需要遍历两个哈希表,效率不高。增加元素对应着将该元素所对应的二进制位改为1:如在上述的集合A中加上5这个元素,就是A∪{5},也就是将其二进制数0011110变为0111110,这里设 a = 0011110,将1左移五位再与a按位或即可实现,(1 << 5) | a = 0111110。
2024-09-28 15:59:12
440
原创 系统编程基础与Linux下的集成开发环境
Linux下一切皆文件,Linux中的权限自然也就是与文件相关的权限。用户:owner, grouper , other文件属性:r(read) , w(write) ,x(execute)文件类型:- 普通文件——如源代码,库文件,可执行程序,文件压缩包等d 目录文件;l 链接文件;p 管道文件;c 字符设备文件;b 块文件;s socket文件有了以上认识,再看下文件的各个属性:第一个字符为-, 说明是一个普通文件;
2024-09-18 20:50:36
635
1
原创 C++类和对象——入门
后C++引入class(此时还不叫“C++”,而是“C with Classes”,在1983被正式更名为C++),可以理解为一个可以定义函数的结构体(二者略有不同)由inline修饰的函数会在编译阶段于调用函数处展开,并不会调用函数(这种情况仅在被inline修饰函数的内容较少时出现,具体由编译器判断)类的大小为成员变量之和,但成员函数被放在公共代码段,不被算入大小,空类大小为一。对象则是其具体化实现、是类的实例,具体实现类定义的属性和行为。类的成员变量是另一个类的实例,上述代码中;
2024-06-16 23:06:15
838
原创 C++引用——类型+&+对象
事实也确实如此,在C++语法中,引用无法重新被赋值。返回值如果为非引用类型,编译器就会创建一个临时变量来持有返回值,引用类型返回值则不会(具体原因和证明就不再赘述,以后再详细展开吧)所以为了追求极致的性能,C++在能用的地方肯定是选择引用类型的返回值。但引用不一样,如果引用不进行初始化,代码是直接无法运行,并且引用的初始化赋值只能是一个对象,无法用NULL或者是nullptr对其初始化。并非如此,用引用变量接收后,它就变成了一个纯正的引用变量,编译器会自动处理,不再像指针一样需要自己去进行解引用操作。
2024-06-14 00:36:10
1351
原创 C++函数重载——拙见
原因分析:main函数位于.cpp文件之中,自然按照.cpp语法编译,此时的Add函数被重载为Add@@YAHHH@Z,Add函数的实现在.c文件中,按照c语法编译为Add。代码经过预处理->编译->汇编,到链接时,主函数用Add@@YAHHH@Z去找.c文件之中的Add,能找到吗?例如:main函数位于test.cpp文件,且main函数前已申明Add函数。用extern "C"声明函数,编译器就会以C的标准去编译这个函数,自然也就能用Add去找到Add函数的地址。
2024-06-10 01:26:47
417
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人