- 博客(63)
- 收藏
- 关注
原创 【C++】AVL树|插入|单旋|双旋
AVL树节点的定义增加了一个指向父节点的指针,变成了三叉链结构,在原二叉树的基础上,加上平衡因子(调整平衡的作用)。struct AVLTreeNode //AVL树节点定义//构造函数, _kv(kv), _bf(0){}int _bf;
2025-01-06 14:56:07
1008
原创 【网络编程】socket套接字|sockaddr|sockaddr_in|通信过程
介绍了socket套接字完整流程,sockaddr结构体详解
2024-09-20 19:58:12
1354
原创 【Linux网络编程】协议|OSI模型|TCP/IP模型|局域网通信|跨网络通信|地址管理|流程图
概述了网络基础概念,介绍了局域网通信,跨网络主机通信,IP地址,Mac地址及这两者的协作
2024-09-03 21:36:13
1030
原创 【Linux】重谈页表寻址|深入理解物理内存和页表的映射|页框|CPU|CR3|MMU
详细介绍了寻址过程,页表实际上是 页目录 二级目录组成,介绍了CPU cr3和MMU的作用和在寻址过程中角色
2024-08-11 14:38:21
711
原创 【Linux】阻塞信号|信号原理|深入理解捕获信号|内核态|用户态|sigaction|可重入函数|volatile|SIGCHILD|万字详解
为了能够修改这些信号集,用户程序需要通过系统调用来进行操作:sigset_t类型的数据结构让用户可以方便地设置和查询信号集的状态;数组的下标是信号的编号,数组的内容是函数指针(该信号的处理函数);有了上面两张位图表,进程就能知道接受了哪些信号,信号是否阻塞(不需要处理),而信号也有需要处理的;按下ctrl+c后程序没有被终止,说明这个信号确实被阻塞了,然后未决表显示该信号一直出于未决状态,没有被递达。SIG_BLOCK:将set指向的信号集中的信号添加到阻塞信号集中。信号是用户,操作系统,进程交互用的;
2024-08-09 23:30:21
1154
1
原创 【Linux】信号|Core|Term|raise|abort|硬件异常|软件异常|signal信号
介绍了信号是操作系统用于通知进程发生特定事件的一种机制。信号可以由硬件异常(如除以零)或软件条件(如定时器到期)触发。进程可以通过signal函数注册信号处理器来自定义响应。例如,SIGFPE信号会在除以零时由硬件产生并由操作系统发送给进程。进程可以选择默认处理(如终止)、忽略或自定义处理信号。此外,alarm函数可设置定时信号,kill和raise函数可用于向进程发送信号。
2024-08-07 17:59:49
1139
原创 【Linux】匿名管道|命名管道|pipe|mkfifo|管道原理|通信分类|管道的特征和情况
介绍了进程间通信的概念及其重要性,包括数据传输、资源共享等目的,并概述了匿名管道和命名管道这两种通信方式。匿名管道用于具有血缘关系的进程间通信,支持半双工模式,具备内置同步机制。命名管道是一种特殊文件,可通过路径名访问,适用于无亲缘关系的进程间通信。两种管道均提供流式服务,但创建和打开方式不同。
2024-08-06 19:04:59
959
2
原创 【C++】map|set|原理使用|multiset|multimap|operator[]|
主要讲述了 C++ STL 中关联容器的基本概念、使用方法以及内部实现原理,特别是 map, set, multiset, 和 multimap 这些容器,介绍了键值对的概念,以及如何在 set 和 map 中使用 pair 类型表示键值对,并解释了为何使用 pair 类型而不是直接在容器中定义 key 和 value 变量;深入探讨了 pair 类型的定义和使用方法,包括如何使用 make_pair 函数创建匿名 pair 对象。随后介绍了 map 和 set 的内部实现原理,指出这些容器使用平衡搜索树(
2024-08-03 15:24:06
824
原创 【Linux】软连接|硬链接|当前路径(.)|上级路径(..)|硬链接不能链接目录
关于软硬链接的示例,以及对当前路径(.)和上级路径(..)的inode展示,最后解释了硬链接为何不能链接目录的原因
2024-07-30 23:01:29
754
原创 【Linux】文件系统|CHS寻址|LBA逻辑块|文件索引|inode|Date block|inodeBitmap|blockBitmap
inode。
2024-07-26 22:47:43
738
3
原创 【Linux】进程IO|重定向|缓冲区|dup2|dup|用户级缓冲区|模拟缓冲区
在【Linux】进程IO|系统调用|文件描述符fd|封装|理解一切皆文件-优快云博客中讲述了文件描述符,0代表着键盘,1和2代表着显示器,只不过一个是标准输出,一个是标准错误;
2024-07-25 22:38:38
1089
1
原创 【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件
各类语言的文件操作其实是对系统调用的封装我们经常说,创建一个文件,或者打开一个文件,其实并不是我们用户本身创建,而是进程创建文件。文件是存储在磁盘上的,是硬件,像文件写入其实就是向硬件写入,而我们用户这一角色是没有权力直接写入的,操作系统(OS)是硬件的管理者,必须要通过OS写入;但是,OS不相信任何人,只是提供了系统调用接口对外,想访问文件,就需要使用系统调用;而C/C++..语言都提供了这些系统调用的封装,为何要封装呢?跨平台性。
2024-07-23 11:15:19
815
1
原创 【QT】窗口|菜单栏|菜单项|工具栏|状态栏|浮动窗口
当然,也可以添加其它widget空间,来达到"永久消息"的效果,比如添加label标签。状态栏是一个输出简要信息的区域,一般位于主窗口底部,一个窗口只能有一个状态栏;() (我们创建项目时如果勾选了.ui文件的自动创建),我们不需要在堆上。只需要在创建菜单项的时候,菜单项的名字后面加个(&+添加的快捷键即可)在创建工具栏的同时,也可以设置工具栏的位置,默认位置是在窗口的最上面;创建,而且这一方式也会造成本身携带的造成内存泄露:(因为,当我们自己。,位于主窗口顶部,主窗口标题下的位置;
2024-07-20 19:45:44
1954
1
原创 【QT】常用控件|多元素控件|QListWidget|QTableWidget|QTreeWidget|Widget与WidgetItem|QGroupBox|QTabWidget|布局管理器|万字版
Widget。
2024-07-12 14:53:08
1001
原创 【QT】常用控件|QLineEdit|QTextEdit|QComBox|QSpinBox|QDateTimeEdit|计算日期差值|点餐份数|读取文件下拉框(万字详解版)
用于输入整数值的部件,可以通过键盘或者上下箭头按钮增加或减少数字,设置步进值,每次增加或减少的数值量,它常用于需要用户输入整数值的场景。要求输入框输入一个合法的电话号码(1开头,11位,全部为数字),如果验证不通过,按钮无法点击。输入密码,不仅编译器要检查是否一致,用户也要显示查看是否输入错误或查看输入的密码;QLineEdit::password:密码模式,输入的字符会被隐藏;QLineEdit::Normal:默认值,文本框显示输入的文本;添加dial的槽函数,通过value值的改变,触发信号。
2024-07-07 17:17:09
776
原创 【QT】常用控件|QLabel|QLCDNumber|QProgressbar|QCalenderWidget
当我们拖拽修改窗口时,就会触发一系列resize事件,这样的事件,是连续变化的,从窗口大小A~B时,会触发一系列resizeEvent。因为Qt中规定,任何对于页面的操作,必须在主线程完成,如果在自己创建的线程去修改界面元素,Qt程序会崩溃;把label中的文本设置为"快捷键&A"这样的形式 ,&后⾯跟着的字符,就是快捷键,通过。该函数,是父类的一个虚函数,子类重写,多态,一个回调函数。Alignment:有很多对齐方式,左对齐,水平对齐,垂直对齐等。我们想要达到一个效果,让一张图片自适应窗口的变化。
2024-07-04 11:21:43
737
原创 【QT】常用控件|widget|QPushButton|RadioButton|核心属性
的基础组件,它们是实现与用户交互、展示信息、收集输入的关键元素。在使用Qt进行界面开发时,掌握这些基础控件的特性和用法,是构建高效、美观应用的前提。的核心特性,这让控件间的通信变得简单而高效。我们可以轻松地将一个控件的事件(如按钮点击)连接到另一个控件或自定义函数上,实现复杂的交互逻辑。cursor():获取当前widget的cursor属性,返回QCursor对象,当鼠标悬停在widget上时,显示对应的形状。需要设置图标时,依然创建.qrc文件,导入对应图片即可。注意:这里的单位是1ms;
2024-07-02 22:07:11
884
原创 【QT】概述|对象树模型|两种控件模式|信号和槽|lambda
Qt是一个跨平台的C++图形用户界面应用程序框架。在QT中,一个函数对应着一个相对应的头文件,文件和函数名相同;当然了,有的头文件也会隐式包含了其它头文件,所以有些函数不需要特意去包含相对应的头文件。
2024-06-30 12:33:28
1018
原创 【C++】二叉搜索树|Key模型|key_value模型|基本操作
BST。每个节点包含一个键(key)和两个指针,分别指向其左子树和右子树。左子树上的所有节点的键值都小于其父节点的键值。右子树上的所有节点的键值都大于其父节点的键值。每个子树也是一棵二叉搜索树。每个节点包含三个部分:一个键(Key),一个值(Value),以及两个指向其子节点的指针(分别指向左子树和右子树)。
2024-06-24 21:38:41
973
原创 【C++】多态|原理|override|final|抽象类|多继承虚函数表|对象模型|虚表打印|(万字详解版)
C++11引入了override和final两个关键字,它们增强了面向对象编程中的继承和多态特性,提高了代码的安全性和可读性。虚函数自身自带一个_vfptr的虚函数表子类虚函数继承父类虚函数时,不仅继承父类虚函数表,也可以对虚函数进行重写。子类虚函数继承父类虚函数时,非虚函数不会存放在_vfptr中虚表存的是虚函数指针,不是虚函数,虚函数和普通函数一样的,都是存在代码段的,只是他的指针又存到了虚表中。另外对象中存的不是虚表,存的是虚表指针。
2024-06-16 13:31:46
775
原创 【C++】继承|切片|菱形继承|虚继承
C++中的继承是面向对象编程的一个重要特性,它允许一个类(称为子类或派生类)继承另一个类(称为基类或父类)的属性和方法。是最重要的代码复用的手段。是一种在原有基础上进行拓展,增加功能,产生新类的方式;体现了由简单到复杂的认知过程。1.基类private成员无论以什么方式继承到派生类中都是不可见的。这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它。2.基类private成员在派生类中不能被访问。
2024-06-11 22:30:44
1009
1
原创 【C++】string|迭代器iterator|getline|find
目录编辑string1.string与char* 的区别 2.string的使用字符串遍历利用迭代器遍历 范围for遍历 反向迭代器 字符串capacity 字符串插入操作 push_back函数append函数 +=运算符编辑 insert函数substr函数 字符串查找函数 find函数 rfind函数编辑 查找函数的使用 getline函数 利用迭代器遍历 范围for遍历 反向迭代器 string - C++ Referenc
2024-05-14 23:03:50
862
原创 【linux】进程概念|task_struct|getpid|getppid
linux下进程的信息可以通过 /proc 系统文件夹查看,该文件夹存放了所有进程的信息,每一个进程的信息都是一个文件夹。每个进程都有自己的内存空间、代码、数据和执行状态。进程的基本特征是对比单个程序的顺序执行提出的,也是对进程管理提出的基本要求。哪个进程调用getpid(),就会得到哪个进程的。当我们运行以上代码,就会建立相应的进程,通过。的数据结构中,可以理解成它是进程属性的。(进程的身份证号,唯一标识一个进程)程序的父进程是谁呢?获得当前进程的父进程的。,基本上所有指令进程的。
2024-05-08 23:08:00
725
2
原创 【linux】环境基础|开发工具|gcc|yum|vim|gdb|make|git
是Linux/Unix 同 Windows进行 ZModem 文件传输的命令行工具。rz可以很方便的从客户端传文件到服务器,sz也可以很方便的从服务器传文件到客户端,就算中间隔着跳板机也不影响。在 SecureCRT 下的传输协议有。
2024-03-20 22:45:05
1029
原创 【linux】常见指令 -通配符,数据管道,重定向,压缩打包...
像C语言有句C生万物,linux也有一句话,一切皆文件;linux文件是以树状结构存储。
2024-02-23 14:26:32
889
2
原创 【数据结构】(二叉树)计算结点|叶子结点|高度|第K层结点数
对于深度为K 的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对 应时称之为完全二叉树。也就是 说,如果一个二叉树的层数为K,且结点总数是 ,则它就是满二叉树。前序遍历是先访问根节点,再访问左子树,左子树根结点访问完后 才会访问左子树结点然后右子树结点;4. 若规定根节点的层数为1,具有n个结点的满二叉树的深度h = log2(n+1);2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是 2^(h-1);左子树结点数+右子树结点数 + 根节点;
2023-12-17 17:45:01
3068
原创 【数据结构】(堆)Top-k|堆排序
n-1是最后结点下标值,(结点-1)/2 可以得到该结点的父结点,从父结点往下调整;假设给定一串数字,4,6,2,1,5,8,2,9;在排序的基础上,如果这个数很大呢,比如一百万个数,要找到前k个较大值;当插入一个新元素时,插入到堆尾,与父结点比较,相应的往上调整。可以假设法:假设较大(较小)的孩子为左孩子,然后验证假设;注意,构建堆的时候,size是最后一个元素的下一个;堆的逻辑结构是完全二叉树,物理结构是一维数组存储;因为堆分为两类,在数据插入时,需要选择适应的调整;父结点 = (孩子结点-1)/2;
2023-12-14 21:47:02
632
原创 【数据结构】面试OJ题—栈-队列-互相实现|循环队列|括号匹配
目录1. 有效的括号思路:2.用队列实现栈 思路:3.用栈实现队列思路: 4.设计循环队列思路:20. 有效的括号 - 力扣(LeetCode)2.用队列实现栈 225. 用队列实现栈 - 力扣(LeetCode) 3.用栈实现队列232. 用栈实现队列 - 力扣(LeetCode) 4.设计循环队列622. 设计循环队列 - 力扣(LeetCode)
2023-12-06 11:36:50
1134
原创 【数据结构】(双链表)增删查改
双链表的引入是因为单链表要访问某个结点的前驱结点时,只能从头开始遍历,访问后驱结点的复杂度为O(1),访问前驱结点的复杂度为O(n)。为了克服上述缺点,引入了双链表。双链表的引进,对于链表的操作有了极大的遍历;链表由单向的链变成了双向链。双向链表(double linked list)是在单链表的每个结点中再设置一个指向其前驱结点的指针域。
2023-11-20 15:07:26
942
原创 【数据结构】面试OJ题—带环链表(数学推论)
1.如果N是偶数,第一轮内就会追上;2.如果N是奇数,C是奇数,第一轮会错过,下一轮会追击(C是奇数,C-1就会是偶数);只存在这两种//快慢指针在这种情况下,该情况其实还可以推论出另一个公式结论。这就是第二题。
2023-11-14 17:01:55
472
原创 【数据结构】(单链表)增删查改
因为顺序进行插入删除时,有时候需要移动大量数据,造成不便,影响了运行效率。这时候引出了它的黄金搭档单链表;通过一组任意的存储单元来存储线性表中的数据元素,不需要使用地址连续的存储单元,因此它不要求在逻辑上相邻的两个元素在物理位置上也相邻。一:单链表的特点单链表不要求逻辑上相邻的两个元素在物理位置上也相邻,因此不需要连续的存储空间。单链表是非随机的存储结构,即不能直接找到表中某个特定的结点。查找某个特定的结点时,需要从表头开始遍历,依次查找。优点:支持动态内存分配。
2023-11-13 18:47:45
599
原创 【数据结构】(顺序表)增删查改
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在⼀种或多种特定关系的数据元素的集合。数据结构反映数据的内部构成,即数据由那部分构成,以什么方式构成,以及数据元素之间呈现的结构。能够存储数据(如顺序表、链表等结构)存储的数据能够方便查找。
2023-11-06 19:59:33
652
1
原创 【数据结构】面试OJ题—时间复杂度2
定义两个变量,一个用来遍历数组查看是否有和val值相等的,一个用来记录下来不等于val值的,放入数组中;题目说了 数组1是可以包容数组2进去的,我们可以直接将数组2有效值放入数组1最后一个有效值后。我们可以发现时删除重复项,也就说第一个元素该值都是有效的,可以定义变量从1开始;然后定义遍历变量就行for循环,前后比较,将有效值放到有效位置中。,先将两个数组值合并在数组1中,再直接qsort排序即可啦。不要使用额外的数组空间,你必须仅使用。的元素,并返回移除后数组的新长度。我们换一种方式,不使用qsort,
2023-10-29 21:00:41
529
2
原创 【C语言】进阶测试 (呕心沥血式讲解)
A:宏定义不检查参数正确性,会有安全隐患B 宏定义的常量更容易理解,如果可以使用宏定义常量的话,要避免使用const常量c 宏的嵌套定义过多会影响程宁的可读性,而且很容易出错D相对于函数调用,宏定义可以提高程序的运行效率A 预处理 B 编译 C 链接 D 执行A 60 B 190 C 248 D 上述答案都不对char a;int b;float c;double d;
2023-10-23 17:30:53
252
4
原创 【数据结构】面试OJ题—时间复杂度
如果其中一个操作数中的位为 0,而另一个操作数中的位为 1,则相应的结果位设 置为 1。相同为0,不同为1 a^a =0;异或运算的规则是:如果两个对应位的数相同,则该位结果为0;0 ^ 0 = 0,0 ^ 1 = 1,1 ^ 0 = 1,1 ^ 1 = 0,这是异或运算的基本规则。但是此题,又略有不同,因为该数组元素是整型,和上面left,right数值会引起冲突。这两组数组都异或一遍,因为异或的原理,只会剩下只出现一次的那个数字。1异或任何数等于该数的取反,即1 ^ x = ~x。
2023-10-22 20:25:57
549
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人