- 博客(66)
- 收藏
- 关注
原创 c语言中GHashTable的使用
原因:在插入的过程中由于我的key和value是局部遍历,在我走到查询的时候已经被销毁(推测是地址被重新使用)导致找不到对应的value。解决方法:插入的时候为key,value开辟空间,但是查找并不需要,还是按照原理的方法(不知道原因,不够问题解决了)如果哈希表中存在与给定键匹配的键值对,g_hash_table_lookup() 返回指向该值的指针。需要注意的是,存储都是以指针类型存储,存储的是个地址,查找时候也会根据传入的地址查找。结果发现我在查找的时候使用对应的key找不到value的值。
2025-01-03 11:32:00
300
原创 详谈C语言 *字符函数和字符串函数*
文章目录1.strlen2.strcpy和strncpyC语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中或者字符数组中。字符串常量适用于那些对它不做修改的字符串函数。1.strlensize_t strlen ( const char * str );1.字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。2.参数指向的字符串必须要以 ‘\0’ 结束。3.注意函数的返回
2024-12-31 17:48:55
232
1
原创 走进linux多线程
1.线程概念1.概念线程与进程的关系:如果将线程比作一个工厂,则进程就是里面的流水线线程是依附于进程才能存在的,如果没有进程,则线程不会单独存在多线程是为了提高整个程序的运行效率的线程也被称之为执行流,因为在执行用户所写的代码2.从内核角度理解线程进程在内核当中就是一个task_struct操作系统当中没有线程的概念,程序猿所说的创建线程,本质是在linux操作系统中创建轻量级进程(lwp)所以轻量级进程等于线程,我们之前写的代码中main函数执行流被称为主线程pid_t p
2024-12-31 17:48:11
813
1
原创 c++类和对象(六个默认成员函数)
一.类的六个默认成员函数如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情 况下,都会自动生成下面6个默认成员函数默认成员函数:用户没有自己写,编译器会自动生成,一旦用户class Date{};二.构造函数1.概念 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。2.特性函数名与类名相同无返回值对象实例化时编译器自动调用对应的构
2024-12-31 17:46:34
595
1
原创 栈和队列(总结)
队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数 组头上出数据,效率会比较低。栈就像是一个箱子,当你往里放东西时,后放的会压在之前放的上面,而当你想要拿出来时,只能从顶部一个一个的拿取。进行数据插入和删除操作的一端。超市结账,排队结账。入栈之前需要检测是否需要扩容,入栈需要从栈顶入,即将新元素放到数组top的位置。队列的初始化即让队列的头和尾先指向空,当我们入队列时从尾部入,出队列从头部出。再将原来栈中的元素放到新栈之中,让指针指向新开辟的栈,完成栈的扩容。
2024-12-10 13:42:02
545
原创 MYSQL命令总结
当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节,如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。支持小数最大位数d是30。当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键, 可以使用复合主键。
2023-02-02 15:10:55
594
原创 多路转接IO模型(select概念及使用方法)
IO多路转接能够听同事等待多个文件描述符的就绪状态,换句话说,可以帮助我们同时监控多个文件描述符。
2022-08-17 23:00:44
341
原创 网络基础(数据链路层)
NAT转换对于通信双方时透明的,无感知的NAT网关会保存映射关系,应答回来之后,进行再次转换数据只能先从私网到公网,不能从公网到私网NAPT增加了端口的转换,可以大大缓解IP地址枯竭的问题通信过程一旦NAT设备异常,鸡翅存在热备,所有TCP连接也都会断开。...
2022-08-16 12:27:49
310
原创 网络基础(网络层)
udp数据传递给IP协议需要分片传输吗?为什么?答:看数据长度是否超过MTU超过:需要分片传输没超:不需要分片传输TCP数据传递给IP需要分片传输吗?为什么?答:不用,TCP传递的数据一定不会超过MSS。...
2022-08-15 23:06:08
826
原创 网络基础(HTTP协议)
HTTP协议(HyperText Transfer Proyocol)超文本传输协议HTTP是无连接无状态,工作在应用层的协议无连接理解为:http协议本身是没有维护连接信息的http的数据会交给网络协议栈传输层的TCP协议,而TCP是面向连接的无状态:HTTP协议自身不对请求和相应之间的通信状态进行保存也就是说在HTTP下,协议对应发送过的请求和相应都不做持久化处理。...
2022-08-10 22:58:30
715
原创 网络套接字(UDP和TCP编程)
无连接:UDP双方在发送数据之前,是不需要进行沟通的,只需要知道对方的ip和端口就好i(对方进程可能没有准备好)就可以发送。主机字节序:主机本身的字节序,如果是大端,则主机字节序为大端,如果是小端,则主机字节序为小端。面向字节流:1.对于传输的数据没有明显的边界 2.对于接受方而言,可以按照任意的字节进行接收。已完成连接队列:连接已经建立,可以正常通信的连接放在这个队列(三次握手已经完毕的连接)未完成连接队列:还处于连接建立过程的连接被仿真这个队列当中(正在三次握手的连接)...
2022-08-03 17:17:34
820
原创 网络基础(第一节)
结论1在网络中的“数据”不仅仅有数据本身还需要有协议的内容,协议的内容帮助要传输的数据正确的在网络中传输到对方主机。结论3协议部分,在linux操作系统当中也用的描述的手法,描述本身就是一个结构体,即协议部分的内容就是结构体数据。结论1应用层数据经过网络传输的时候,需要经过网络协议栈的封装,到达对端后,需要经过网络协议栈的分用。从软件的层面来考虑将网络的功能进行解耦,有负责应用层数据,有负责端与端之间的传输,有负责路由等等。结论2网络协议栈封装的时候,是增加了协议的内容,为了在网络当中正确传输。...
2022-08-02 10:25:26
308
原创 动态规划每日一练(3)
每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。(1)偷窃第kk间房屋,那么就不能偷窃第k-1k−1间房屋,偷窃总金额为前k-2k−2间房屋的最高总金额与第kk间房屋的金额之和。给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下,一夜之内能够偷窃到的最高金额。(2)不偷窃第kk间房屋,偷窃总金额为前k-1k−1间房屋的最高总金额。...
2022-07-26 20:58:34
112
原创 动态规划每日一练(2)
它意味着爬到第xx级台阶的方案数是爬到第x-1x−1级台阶的方案数和爬到第x-2x−2级台阶的方案数的和。很好理解,因为每次只能爬11级或22级,所以f(x)f(x)只能从f(x-1)f(x−1)和f(x-2)f(x−2)转移过来,而这里要统计方案总数,我们就需要对这两项的贡献求和。给你一个整数数组cost,其中cost[i]是从楼梯第i个台阶向上爬需要支付的费用。你可以选择从下标为0或下标为1的台阶开始爬楼梯。2.使用最少花费爬楼梯。...
2022-07-26 17:51:50
113
原创 动态规划每日一练(1)
斐波那契数的边界条件是F(0)=0F(0)=0和F(1)=1F(1)=1。T0=0,T1=1,T2=1,且在n>=0的条件下Tn+3=Tn+Tn+1+Tn+2。给你整数n,请返回第n个泰波那契数Tn的值。
2022-07-22 20:15:14
264
原创 【C++】STL-string类深入学习
文章目录1.初识string类2.string类对象的常见构造1)string()2)string (const string& str)3)string (const string& str, size_t pos, size_t len = npos)4)string (const char* s)5)string (const char* s, size_t n)6)string (size_t n, char c)7)template 3.string类对象的容量操作1)size2)
2022-04-13 11:54:06
356
1
原创 Linux进程信号~详解
一.信号的概念信号是进程之间事件异步通知的一种方式,属于软中断告诉有这样一个信号,但是这个信号的具体处理方式以及什么时候处理由进程决定,所以是软中断。二.信号的种类kill —l可以罗列出所有信号(总共定义了62个信号)没有32,33号信号非实时信号(又称非可靠信号)特点:信号可能会丢失 1~31实时信号(又称可靠信号)特点:信号不会丢失 33~64三.信号的产生1.硬件产生kill命令向进程发送信号kill -[信号值] [pid]ctr
2022-04-03 21:30:35
1888
原创 c++类和对象(类的概念)
1.类和对象概念类:用来对实体(对象)进行描述,对象有什么属性,以及对象具有什么功能是一种自定义类型对象:现实生活中所存在的 ,对象是对类的具体体现 用类类型创建出来的变量称为对象2.类的定义class[类名]{ //类体:成员变量属性,成员变量功能}方法一:将类的声明和定义全部放在类中定义方法二:在头文件中放类的声明,在源文件中放类的定义5.类的访问限定符及封装6.类的对象大小计算7.类成员对象的this指针...
2022-03-24 15:54:28
6432
原创 进程间通信
1. 简单文件系统1.为什么要进行进程间通信2.常见的进程间通信方式2.管道1.匿名管道1)管道符号ps aux | grep 2)管道的本质3)管道的接口4)从PCB的角度理解管道5)管道的特性6)设置非阻塞属性2.命名管道...
2022-03-23 09:40:53
247
原创 基础IO(总结)
一.C语言中的文件接口1.fopenpath:带有路径的文件名称(如果不带路径,打开的文件默认是在当前路径下)mode:打开文件的方式r :只读方式打开;文件流指向文件起始位置r+ :可读写方式打开;文件流指向文件起始位置w :文件存在:则截断(清空文件内容)文件;文件不存在,则创建一个新文件;w+ :可读可写的方式打开。文件存在:则截断(清空文件内容)文件;文件不存在,则创建一个新文件;a:追加写。当前文件不存在,则创建文件;当前文件存在,则将文件流指针指向文件末尾进行写。a +:可
2022-03-15 15:26:35
961
1
原创 linux进程概念
一.进程&程序程序:源代码经过编译产生可执行文件,这个文件是静态的。进程:程序运行起来的实例,是动态在运行的。1.操作系统如何管理进程进程的管理=描述(PCB)+组织的方式(链表)PCB:processs ctrl block (进程控制块)在linux操作系统下的PCB是task struct结构体task_struct结构体内部内容:进程号:PID进程状态:就绪/运行/阻塞细分进程状态:R:运行状态S:可中断睡眠状态D:不可中断睡眠状态T:暂停状态(ctrl +z
2022-03-08 00:10:36
391
原创 操作系统(Operator System)
什么是操作系统概念:任何计算机系统都包含一个基本的程序集合,成为操作系统(OS)。操作系统=操作系统内核+一堆应用操作系统内核:也是代码程序,代码的作用是 (进程管理,内存管理,文件管理,驱动管理等等)一堆应用:依附在操作系统内核上完成某些功能。例如:QQ,微信,飞书等等操作系统的定位操作系统在管理计算机的软硬件资源硬件资源:CPU,内存,硬盘,网卡,显示器等等软件资源:进程资源,驱动程序如何理解管理管理=描述(结构体)+组织(串联结构体)系统调用函数&库函数系统调
2022-03-02 16:19:32
553
1
原创 冯诺依曼体系结构
中央处理器:cpu存储器:内存 (并非是磁盘)输入设备:键盘,鼠标,扫描仪,网卡等输出设备:屏幕,网卡,打印机等冯诺依曼两个重要思想:1:所有数据都采用二进制进行存储2:运算产生的数据都是存储在内存之中...
2022-03-02 15:46:29
216
原创 剑指offer 64:求1+2+3+...+n
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例1输入:5返回值:15示例2输入:1返回值:1class Sum { public: Sum() { _ret+=_i; _i++; } static int Getret() { retur.
2022-01-22 16:24:56
84
原创 数据结构大总结~(二叉树)
文章目录????1.树的概念和结构1.1树的概念1.2 树的相关概念1.3 树的表示1.4 树的应用????2 二叉树2.1 二叉树的概念????1.树的概念和结构1.1树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。1.有一个特殊的结点,称为根结点,根节点没有前驱结点2.除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每3.一个集
2022-01-04 16:51:46
947
1
原创 详解复杂度的计算
文章目录算法的时间复杂度和空间复杂度⭐️1.算法效率⭐️2.时间复杂度1.1时间复杂度的概念1.2大O的渐进表示法1.3常见例题⭐️3.空间复杂度⭐️4. 常见复杂度对比算法的时间复杂度和空间复杂度⭐️1.算法效率算法的复杂度:1.算法在编写成可执行程序后,运行 时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。2.时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。在计算机发展的早期
2021-12-11 23:26:30
8665
1
原创 【堆】的实现
文章目录1. ????堆的概念和结构2. ????堆向下调整法3. ????堆向上调整法4. ????堆的创建5. ????堆的插入6. ????堆的删除7. ????堆的数据个数8. ????取堆顶的数据9. ????堆的销毁0.完整代码1. ????堆的概念和结构堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:堆中某个节点的值总是不大于(大堆)或不小于(小堆)其父节点的值;2.堆总是一棵完全二叉树。一般情况下,堆的所有元素
2021-12-08 01:08:15
949
原创 力扣 61:旋转链表
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。题目链接~~~~示例 1:输入:head = [1,2,3,4,5], k = 2输出:[4,5,1,2,3]示例 2:输入:head = [0,1,2], k = 4输出:[2,0,1]思路:1.当k=链表长度的时候是一个循环,所以先给k模上链表长度,然后进行k次尾删尾插即可2.将链表练成一个环,在k模方法1:int ListNode(struct ListNode* head){ st.
2021-12-05 13:35:20
148
1
原创 力扣 24:两两交换链表中的结点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。题目链接~~~~示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]思路:链表长度为单数时最后一个不用交换,可以用两个指针跟随着走。void Swap(int* left,int* right){ int temp=*left;.
2021-12-05 12:43:15
107
原创 力扣 19:删除链表的倒数第N个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]思路:首先要找到待删的结点位置1.可以先计算整个链表的长度,然后就可以让遍历的指针指到待删结点的前一个结点2.也可以用快慢指针解决,也是找到待删结点的前一个方法1:int List(struct L.
2021-12-05 12:17:40
130
原创 力扣 2:两数相加
题目: 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。题目链接~~~~示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2::输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,.
2021-12-05 11:23:43
90
原创 力扣 20:有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。题目链接~~~~~~示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true思路:遇到左括号.
2021-12-04 22:20:18
254
原创 C++[引用(&)]的作用和使用(引用作返回值的后果)
1. 引用的概念引用的本质并非定义变量;而是给已经定义的变量取了个新的名字,编译器不会为它新开辟空间,它与它引用的变量共用同一块内存空间。使用方法:类型& 引用变量名(对象名) = 引用实体void TestRef(){ int a = 10; int& ra = a;//<====定义引用类型 printf("%p\n", &a); printf("%p\n", &ra);}可以看到两个的地址是相同的。 注意:引用类型必须和引用实体是
2021-12-04 21:15:41
3540
2
原创 liunx入门第二章~权限的概念
文章目录1.用户的分类2. Linux权限管理2.1 文件访问者的分类2.2 文件类型和访问权限2.3 文件权限值的表示方法2.4 更改文件权限1.用户的分类Linux下有两种用户:超级用户(root)、普通用户。超级用户:可以再linux系统下做任何事情,不受限制普通用户:在linux下做有限的事情。超级用户的命令提示符是“#”,普通用户的命令提示符是“$”用户的切换:su 【用户名】root->普通用户不需要输入密码;普通用户->root需要输入密码; 注意:由于r
2021-12-03 18:52:03
1569
2
原创 C++[函数重载与extern “C”]
什么叫函数重载?自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。①谁也赢不了②谁也赢不了函数重载的概念函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题int Add(int left, int right) { return left+right; }double Add(double lef
2021-12-01 14:00:11
712
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人