- 博客(77)
- 收藏
- 关注
原创 C/C++ 高阶数据结构 —— 二叉搜索树(二叉排序树)
二叉查找树(BST)摘要 二叉查找树(BST)是一种特殊的二叉树结构,其核心特性是:对于任意节点,其左子树所有节点值都小于该节点,右子树所有节点值都大于该节点。这种结构使得查找、插入和删除操作的时间复杂度平均为O(logN)。删除操作需根据节点类型(叶子节点、度为1节点、分支节点)采取不同策略:直接删除、用子节点替换或递归替换前驱/后继节点。BST的中序遍历会产生一个递增序列,使其成为高效的数据存储和检索结构。文章通过图示详细解析了BST的删除逻辑和实现方法,并提供了C++代码示例。
2025-08-31 23:20:16
1598
26
原创 进程状态 —— Linux内核(Kernel)
状态符号含义是否消耗资源运行/可运行R正在或即将使用CPU是可中断睡眠S等待事件,可被信号唤醒否(等待中)不可中断睡眠D等待I/O,不可被信号唤醒否(等待中)僵尸Z已终止,等待父进程回收否(但占用PID)停止T被信号暂停执行否🌟各位看官好我是工藤新一¹呀~🌈愿各位心中所想,终有所致!
2025-08-31 23:05:21
1914
29
原创 Linux —— 进程的程序替换[进程控制]
为什么要做语言级别的封装呢:在做程序替换时,我们要面对各种各样不同的上层替换所需的场景。的样子,方便我们使用。我们知道:每一进程都存在命令行参数(argc, argv),所以我们曾经并不知道我们自己进程的命令行是谁传入的?,顾名思义,就是将一个进程当前正在运行的程序(代码、数据、堆栈等),使得同一个进程可以执行不同的程序代码(允许一个正在运行的进程。换句话说:一旦替换成功,程序的后半段源代码是不会被执行的。进程替换的本质:让进程执行全新的 代码 & 数据[程序],转而执行一个全新的、磁盘上的程序文件。
2025-09-15 23:57:55
851
6
原创 Linux —— 进程控制
系统调用: — 一次调用,两次返回进程调⽤fork,当控制转移到内核中的fork代码后,内核做:一个进程既可以属于全局的链表,又可以属于某个调渡队列当父子进程任意一方试图写⼊,便以写时拷贝的方式各⾃⼀份副本。写时拷贝是⼀种延时申请技术为什么需要写时拷贝?关键思想:为什么要在进程一开始就把它可能永远用不到的东西全部加载好呢?进程终止的本质是释放系统资源,就是释放进程申请的相关内核数据结构(PCB,页表…)和对应的数据和代码。我们曾经学过有种进程状态:僵尸状态。僵尸进程一旦终止时,其 会维持起来,方便我们获取
2025-09-15 23:53:01
698
12
原创 Linux —— 虚拟进程地址空间
页表是虚拟内存系统的核心数据结构,是连接虚拟地址和物理地址的“地图”或“翻译官”;是Kernel为每个进程维护的一个映射表,它记录了该进程的虚拟内存页对应到物理内存帧的映射关系简单来说,它的工作就是回答这个问题:“这个进程看到的虚拟地址 X,实际上在物理内存的哪个地方?OS 会将进程物理地址隐藏起来,我们只能观测到进程的虚拟地址。
2025-09-07 21:38:26
1769
35
原创 Linux —— 环境变量
环境变量(environment variables)⼀般是指在OS中⽤来指定OS运行环境的⼀些参数如:我们在编写 C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪⾥,但是照样可以链接成功,⽣成可执⾏程序,原因就是有相关环境变量帮助编译器进行查找环境变量通常具有某些特用途,还有在系统当中通常具有全局特性。
2025-09-04 23:48:10
1225
12
原创 Linux - 进程切换
特性独立并发并行竞争核心思想互不干扰交替推进**(时间段)**同时执行**(时间点)**时序错误依赖硬件无单核即可必须多核无(但并行会加剧)共享资源无可能有可能有必须有是否期望是(简化设计)是(提高效率)是(提高性能)否(必须避免)你编写了一个并发的程序(多线程)来解决一个问题,期望它能利用多核特性并行执行以提高速度。如果这些并发/并行的线程访问了非独立的(即共享的)数据,并且你没有做好同步保护,那么就会产生竞争条件,导致程序出错。
2025-09-02 23:58:11
1004
12
原创 Linux 孤儿进程 (Orphan Process)
孤儿进程是指在父进程执行完毕并终止后,其仍然还在运行的一个或多个子进程。简单来说,就是一个孩子还在,但它的父母已经不在了。⽗进程如果提前退出,那么子进程后退出,进⼊“Z”状态后,那该如何处理呢?父进程先退出,子进程就称之为 “孤儿进程”孤儿进程被1号systemd进程领养孤儿进程是活进程:它还在运行,只是父亲没了。内核安全网:内核通过让init 进程(PID 1)自动收养所有孤儿进程来避免问题。这是一个关键的设计,保证了系统的健壮性。无害性。
2025-09-01 21:43:57
1414
12
原创 C/C++ 数据结构 —— 线索二叉树
注意:度为 0/1 的节点才需线索化C++// 线索标志THREAD // 1 节点指向nullptr// 枚举:孩子 or 线索// 定义树节点的存储类型// 线索标志默认为 0// 初始化字段 - 也要添加标志位初始化。
2025-08-27 22:30:51
1189
10
原创 C/C++ 数据结构 —— 树的遍历(3)
反之,给我们一组线性化的序列,能否将原来的二叉树复原(换句话说,复原后的二叉树是唯一的吗?:否)🌟各位看官好,我是工藤新一¹呀~🌈愿各位心中所想,终有所致!
2025-08-27 00:48:29
745
6
原创 C/C++ 数据结构 —— 树(2)
🎁个人主页:工藤新一¹ 🔍系列专栏:C++面向对象(类和对象篇) 🌟心中的天空之城,终会照亮我前方的路 🎉欢迎大家点赞👍评论📝收藏⭐文章树是一种递归的结构在树形结构中,我们最常用的就是二叉树。一颗二叉树的节点是一个有限的集合,该集合由一个根节点,再加上两颗别称为左子树和右子树的二叉树组成二叉树不存在 “度” 大于 的节点二叉树的子树一定有序(有左右之分),次序不能颠倒,因此二叉树是一颗有序树对于深度为 ,有 个节点的二叉树,当且仅当其每
2025-08-26 22:04:35
792
5
原创 C/C++数据结构 —— 树(1)
🎁个人主页:工藤新一¹ 🔍系列专栏:C++面向对象(类和对象篇) 🌟心中的天空之城,终会照亮我前方的路 🎉欢迎大家点赞👍评论📝收藏⭐文章树是一种非线性的数据结构,是由有层次关系的 N 个节点组合的有限集合,存在分支的节点被称为分支节点,这些没有分支的节点(树的终点、端点)被称为叶子节点我们要知道,编程语言中的树与现实世界中的树的区别:编程语言中的树其实就是对现实生活中的树的非常形象的比喻简而言之,树描述的是有层次关系的数据如图,在树中子树所对
2025-08-26 00:18:58
1119
5
原创 C++类和对象进阶 —— 与数据结构的结合
classStack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加或者m开头,注意 C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求定义在类中的成员函数默认为 inline(内联)public://成员函数//1、对栈初始化");exit(1);top = 0;//2、入栈操作。
2025-05-06 23:24:52
1393
14
Markdown(Typora)(含下载安装方式)新手使用教程
2025-03-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅