自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

C/C++ 数据结构与算法 Linux MySQL 计算机网络 实战项目 LeetCode刷题 牛客网刷题 剑指Offer等

C/C++ 数据结构与算法 Linux MySQL 计算机网络 实战项目 LeetCode刷题 牛客网刷题 剑指Offer等

  • 博客(95)
  • 收藏
  • 关注

原创 【Linux】:信号与信号量以及信号捕捉与处理(为多线程和网络做准备)

信号的定义:信号是 Linux 操作系统中用于进程间通信、处理异常等情况的一种机制。它是由操作系统向一个进程或者线程发送的一种异步通知,用于通知该进程或线程某种事件已经发生,需要做出相应的处理信号的作用:进程间通信:进程可以通过向其他进程发送信号的方式进行通信,例如某个进程在完成了某项工作之后,可以向另一个进程发送 SIGUSR1 信号,通知其进行下一步的操作。

2024-04-27 15:03:16 954 12

原创 【C++】:手撕红黑树(红黑树的模拟实现)

/ 节点的颜色// 红黑树节点的定义{}// 节点的左孩子// 节点的右孩子// 节点的双亲(红黑树需要旋转,为了实现简单给出该字段)// 节点的值域// 节点的颜色。

2024-04-27 14:13:49 849 29

原创 【C++】之哈希——unordered系列关联式容器/HashTable的底层结构/HashTable的模拟实现/哈希的应用/基于Hash和位图的海量数据处理面试题

在此文章之前呢 我分享一下我学习C++中的STL源码的心得 最开始学习的是vector和string 这一部分实现起来比较简单 具体可以去看看我前面写的博客 然后就是stack和queue这部分序列式就是所谓的站和队列 这部分我没有以博客的形式呈现出来 具体大家可以去参考一下stack和queue的STL源码 然后就是学的list容器 这部分也比较简单 大家感兴趣可以去看看我写的博客 也是写到了的 然后就是deque双端队列这部分大家可以去参考侯捷老师的STL源码剖析shizhi 我下面也会给大家把图片和

2024-03-31 18:05:12 1201 41

原创 【C++】:STL序列式容器list源码剖析

总的来说:环形双向链表特点:底层是使用链表实现的,支持双向顺序访问在list中任何位置进行插入和删除的速度都很快不支持随机访问,为了访问一个元素,必须遍历整个容器与其他容器相比,额外内存开销大设计目的:令容器在任何位置进行插入和删除都很快何时使用:容器需要不断地在中间插入或删除元素无论删除还是增加,list的迭代器、引用、指针都不会失效。

2024-01-19 09:53:53 1032 31

原创 【Linux】:Linux中的Git分支管理

本章开始介绍 Git 的杀⼿级功能之⼀(注意是之⼀,也就是后⾯还有之⼆,之三……):分⽀。分⽀就是科幻电影⾥⾯的平⾏宇宙,当你正在电脑前努⼒学习 C++ 的时候,另⼀个你正在另⼀个平⾏宇宙⾥努⼒学习 JAVA如果两个平⾏宇宙互不⼲扰,那对现在的你也没啥影响。不过,在某个时间点,两个平⾏宇宙合并了,结果,你既学会了 C++ ⼜学会了 JAVA!在版本回退⾥,你已经知道,每次提交,Git都把它们串成⼀条时间线,这条时间线就可以理解为是⼀个分⽀。

2024-01-12 21:22:40 1493 24

原创 【C++】:C++中的STL序列式容器vector源码剖析

public://vector的迭代器是原生指标...//等同于int* ivite;//等同于Shape* svite;

2024-01-12 20:58:26 1256 22

原创 【C++】:STL源码剖析之vector类容器的底层模拟实现

如果没有备用空间了,就扩充空间(重新配置、搬移数据、释放原空间)。注意 : 将数据拷贝到新空间,仍然不能用memcpy函数,因为对于需要深拷贝的自定义类型,使用memcpy函数以后,新开辟空间里的元素和原空间里的元素所指向的内存空间是一样的,当旧空间被释放时,会调用自定义类型的析构函数,从而使得新开辟空间里的元素指向的内存空间也被释放掉了。1). 新开辟一块空间,若容器为空,将_start,_finish指向新开辟空间的首元素地址, _endofstorage指向新开辟空间的最后一个元素下一个位置。

2023-12-08 16:19:07 1842 103

原创 【C++】:STL中的string类的增删查改的底层模拟实现

本篇博客仅仅实现存储字符(串)的string同时由于C++string库设计的不合理,我仅实现一些最常见的增删查改接口接下来给出的接口都是基于以下框架:private: char* _str;//思考如何不用const size_t _size; size_t _capacity; //这样写可以 const static size_t string::npos = -1; //下面这种写法也可以->和上述写法产生矛盾 const static size_t str

2023-11-22 16:40:44 1153 142

原创 【C++】:STL——标准模板库介绍 || string类

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

2023-11-14 22:55:02 1672 92

原创 【C++】:内存管理 || 泛型编程 || 函数模板 || 类模板 || 内存泄漏(后期结合智能指针详讲)

operator new与operator delete函数(重点)new和delete是用户进行动态内存申请和释放的操作符,operator new 和operator delete是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局函数来释放空间_free_dbg。

2023-11-10 10:19:41 391 58

原创 【Linux】:git基本操作_添加文件_两种场景_查看.git文件 || git修改文件 || 版本回退

🎯在包含.git的⽬录下新建⼀个ReadMe⽂件,我们可以使⽤ git add 命令可以将⽂件添加到暂存区:• 添加⼀个或多个⽂件到暂存区: git add [file1] [file2] …• 添加指定⽬录到暂存区,包括⼦⽬录: git add [dir]• 添加当前⽬录下的所有⽂件改动到暂存区: git add .再使⽤ git commit 命令将暂存区内容添加到本地仓库中:• 提交暂存区全部内容到本地仓库中: git commit -m “message”

2023-11-08 19:36:33 597 40

原创 【C++】:内存管理:C++内存分布 || C++中动态内存管理(new || delete)

【说明】🃏1. 栈又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向下增长的🃏2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。(Linux课程如果没学到这块,现在只需要了解一下)🃏3. 堆用于程序运行时动态内存分配,堆是可以上增长的。🃏4. 数据段–存储全局数据和静态数据。

2023-11-08 11:42:04 348 79

原创 【Linux】:初识git || centos下安装git || 创建本地仓库 || 配置本地仓库 || 认识工作区/暂存区(索引)以及版本库

Git 原理与使用课程⽬标• 技术⽬标:掌握Git企业级应⽤,深刻理解Git操作过程与操作原理,理解⼯作区,暂存区,版本库的含义• 技术⽬标:掌握Git版本管理,⾃由进⾏版本回退、撤销、修改等Git操作⽅式与背后操作原理• 技术⽬标:掌握Git分⽀管理,从分⽀创建,切换,合并,删除的整个⽣命周期,灵活进⾏各种场景下的分⽀管理,学习常⻅分⽀管理策略• 技术⽬标:掌握Git远程仓库与本地仓库,结合版本管理与分⽀管理,做到基于分⽀级的个⼈级开发。

2023-11-07 14:05:05 2847 81

原创 【Linux】:使用git命令行 || 在github创建项目 || Linux第一个小程序——进度条(进阶版本)

在本章开始之前还是先给大家分享一张图片这是C++的笔试题 感兴趣的同学可以去试一试 有难度的哟 也可以直接在牛客网直接搜索这几道题目哈好了今天我们正式进入我们的正题部分。

2023-11-06 14:02:01 3890 73

原创 【Linux】:Linux项目自动化构建工具——make/Makefile || Linux第一个小程序——进度条(简单版本)

在开始本章之前 我们需要回顾一下上节课的函数的动静态库的优缺点动态库的优点: 比较节省资源(这里说的资源不仅仅是磁盘资源 也包括网络资源 内存资源等等),不会出现太多的重复代码缺点:对库的依赖性较强,一旦库丢失 那么所有使用这个库的程序就无法运行,具体理解见上一篇Linux博客静态库的优点:不依赖库,同类型平台中都可以直接使用缺点:可执行程序体积比较大 浪费资源。

2023-11-05 21:28:46 1114 60

原创 【C++】:类和对象(下):explicit || 再谈构造函数 || static成员 || 友元 || 内部类 || 匿名对象 || 拷贝对象时的编译器优化问题 || 再次理解类和对象

🔫类和对象(下篇)🔫【本节目标】🔫1. 再谈构造函数🔫2. Static成员🔫3. 友元🔫4. 内部类🔫5.匿名对象🔫6.拷贝对象时的一些编译器优化🔫7. 再次理解类和对象。

2023-11-03 17:26:02 1218 95

原创 【C++】:类和对象(中):const成员 || 取地址及const取地址操作符重载

📪将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改🎈🎈这里给大家分享一个文档以及我给大家查到的知识🎈🎈C++委员会已经帮我们写好的C++库 我们只需要写很短小的一截就可以自动识别类型 这是因为函数重载 类型匹配 函数名修饰规则的原因所以我们标准的cout重载应该按照以下的语法规则书写📟输入的语法规则则为📮见下图能否帮助你理解一下🎓下面给大家总结一下🎓运算符重载。

2023-11-03 16:00:52 796 55

原创 【Linux】:Linux开发工具之Linux编译器——gcc/g++的使用

🍲1. 预处理(进行宏替换)预处理阶段我们要分为1.头文件展开2.宏替换3.条件编译4.去掉注释这一步会帮助我们生成.i文件🍲2. 编译(生成汇编)编译阶段我们要分为1.检查语法2.生成汇编代码最后生成.s文件🍲3. 汇编(生成机器可识别代码)汇编阶段我们要将代码转化成二进制的机器码(CPU可识别)生成.o文件🍲4. 链接(生成可执行文件或库文件)合并文件 链接一些没有确定的函数的地址等’生成a.out文件。

2023-10-30 20:37:51 791 79

原创 【Linux】:Linux开发工具之Linux编辑器vim的使用

三种模式📈正常模式📈插入模式📈底行模式📈我们一共有12种总模式,大家下来可以研究一下vim操作打开,关闭,查看,查询,插入,删除,替换,撤销,复制等等操作。

2023-10-30 19:21:16 1977 48

原创 【C++】:拷贝构造函数与赋值运算符重载的实例应用之日期类的实现

🔑+=实现的思路就是,实现一个循环,直到天数回到该月的正常天数为止,在循环内部要做的就是进月和进年,让天数不断减去本月天数,直到恢复本月正常天数时,循环结束,返回对象本身即可。🔑-=实现的思路就是,实现一个循环,直到天数变为正数为止,在循环内部要做的就是借月和借年,让天数不断加上上一个月份的天数,直到恢复正数为止,循环结束,返回对象本身。🔑由于日期类的大小比较,均不涉及对自身的改变,对此,我们统一用const来修饰this指针,让其变成const成员函数,减少代码的出错性。🔑前置−−和后置−−重载。

2023-10-26 16:30:27 2421 104

原创 【LeetCode刷题(数据结构与算法)】:反转链表||

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表示例 1:输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]示例 2:输入:head = [5], left = 1, right = 1输出:[5]

2023-10-24 18:20:51 75

原创 【LeetCode刷题(数据结构与算法)】:三数之和(数组+指针+排序)

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 请你返回所有和为 0 且不重复的三元组。不同的三元组是 [-1,0,1] 和 [-1,-1,2]输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]输入:nums = [0,1,1]输入:nums = [0,0,0]输出:[[0,0,0]]

2023-10-24 16:16:47 126

原创 【剑指Offer】:循环有序列表的插入(涉及链表的知识)

给定循环单调非递减列表中的一个点,写一个函数向这个列表中插入一个新元素 insertVal ,使这个列表仍然是循环升序的给定的可以是这个列表中任意一个顶点的指针,并不一定是这个列表中最小元素的指针如果有多个满足条件的插入位置,可以选择任意一个位置插入新的值,插入后整个列表仍然保持有序如果列表为空(给定的节点是 null),需要创建一个循环有序列表并返回这个节点。否则。请返回原先给定的节点示例 1:输入:head = [3,4,1], insertVal = 2。

2023-10-24 15:46:40 93

原创 【剑指Offer】:删除链表中的倒数第N个节点(此题是LeetCode上面的)剑指Offer上面是链表中的倒数第K个节点

给定一个链表,删除链表的倒数第 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]在对链表进行操作时,一种常用的技巧是添加一个哑节点(dummy node),它的 next 指针指向链表的头节点。这样一来,我们就不需要对头节点进行特殊的判断了。

2023-10-23 20:51:31 268 1

原创 【Linux】:Linux软件包管理器yum

在Linux当中什么是包管理器呢?在Linux当中 我们要进行工具 指令和程序等的安装 检查和卸载等所以我们需要我们对应的yum软件。

2023-10-23 19:39:41 878 75

原创 【C++】:类和对象(中)之拷贝构造函数+赋值运算符重载

在现实生活中,可能存在一个与你一样的自己,我们称其为双胞胎那在创建对象时,可否创建一个与已存在对象一某一样的新对象呢?拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。

2023-10-22 21:04:40 1596 29

原创 【2023_10_22计算机热点知识分享】:人工智能

最近计算机领域的热点话题之一是人工智能的发展。人工智能是一种能够模拟人类智能的技术,它可以通过机器学习、深度学习、自然语言处理等技术,实现语音识别、图像识别、自然语言处理等智能化的功能。人工智能技术的发展,正在深刻地改变着人类的生活和工作方式,它已经被广泛应用于医疗、金融、交通、安防等领域,成为了现代社会的重要支撑技术之一。

2023-10-22 20:41:15 273

原创 【LeetCode刷题(数据结构与算法)】:将二叉搜索树转化为排序的双向链表

将一个 二叉搜索树 就地转化为一个 已排序的双向循环链表对于双向循环列表,你可以将左右孩子指针作为双向循环链表的前驱和后继指针,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点特别地,我们希望可以 就地 完成转换操作。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继。还需要返回链表中最小元素的指针示例 1:输入:root = [4,2,5,1,3]输出:[1,2,3,4,5]

2023-10-21 21:13:17 177

原创 【LeetCode刷题】:仅仅反转字母(双指针+字符串)

我们使用 left 指针从左边开始扫描字符串 s,right 指针从右边开始扫描字符串 s如果两个指针都扫描到字母,且 left<right,那么交换 s[left] 和 s[right],然后继续进行扫描;输入:s = “Test1ng-Leet=code-Q!输出:“Qedo1ct-eeLg=ntse-T!输入:s = “a-bC-dEf-ghIj”输出:“j-Ih-gfE-dCba”所有英文字母(小写或大写)位置反转。所有非英文字母保留在原有位置。输入:s = “ab-cd”输出:“dc-ba”

2023-10-21 16:00:08 177 1

原创 【2023_10_21_计算机热点知识分享】:机器学习中的神经网络

神经网络是一种模拟人脑神经系统的计算模型,它由大量的人工神经元相互连接而成,可以用来进行模式别、分类、回归、聚类等任务。神经网络的基本组成部分是神经元,它们可以接收来自其他神经元的输入,经过一定的计算后,产生输出。神经元之间的连接可以通过权重来进行调节,权重的调节可以通过训练来实现。神经网络的训练过程一般是通过反向传播算法来实现的,它可以自动调节神经元之间的权重,使得网络的输出可以接近于期望输出。神经网络可以用于图像识别、自然语言处理、语音识别、推荐系统等领域。

2023-10-21 15:46:21 554

原创 【C++】:类和对象(中)之类的默认成员函数——构造函数and析构函数

如果一个类中什么成员都没有,简称为空类空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数由于编译器的优化 我们未给_a赋值 这里是不会报错的这里还需要强调一个点就是成员函数的地址不在对象中成员变量存放在对象中。

2023-10-20 20:06:49 2048 71

原创 【C++】: auto关键字(C++11)+基于范围的for循环(C++11)+指针空值nullptr(C++11)

在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么?C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得return 10;auto b = a;//auto e;无法通过编译,使用auto定义变量时必须对其进行初始化return 0;

2023-10-20 18:59:19 258 37

原创 【LeetCode刷题(数据结构与算法)】:二叉树的最大深度

而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用「深度优先搜索」的方法来计算二叉树的最大深度。具体而言,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在 O(1) 时间内计算出当前二叉树的最大深度。递归在访问到空节点时退出。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。输入:root = [3,9,20,null,null,15,7]给定一个二叉树 root ,返回其最大深度。输入:root = [1,null,2]

2023-10-19 13:58:14 92 3

原创 【LeetCode刷题(数据结构与算法)】:数据结构中的常用排序实现数组的升序排列

现在我先将各大排序的动图和思路以及代码呈现给大家。

2023-10-18 20:08:20 561

原创 【C++】:类和对象(上)+ this指针

/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号注意:class默认成员都是私有的(private)class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。

2023-10-18 19:24:53 1263 74

原创 【LeetCode刷题(数据结构与算法)】:二叉搜索树的范围和

一、什么是二叉搜索树二叉搜索树(BST,Binary Search Tree),也称二叉排序树或二叉查找树二叉搜索树:一棵二叉树,可以为空;如果不为空,满足以下性质非空左子树的所有键值小于其根结点的键值非空右子树的所有键值大于其根结点的键值左、右子树都是二叉搜索树上图值为10的结点的右子树为7,比10小,不满足条件2,所以这棵树不是二叉搜索树上图各个结点都满足条件,所以这棵树是二叉搜索树上图各个结点都满足条件,所以这棵树也是二叉搜索树。

2023-10-18 18:25:38 89

原创 【LeetCode刷题(数据结构与算法)】:链表中的两数相加

给你两个非空的链表,表示两个非负的整数 它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储一位数字请你将两个数相加,并以相同形式返回一个表示和的链表你可以假设除了数字 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,9,9,9,9,9], l2 = [9,9,9,

2023-10-17 16:30:53 77 4

原创 【LeetCode刷题(数据结构与算法)】:有效的括号

当我们遇到一个右括号时,我们需要将一个相同类型的左括号闭合。如果不是相同的类型,或者栈中并没有左括号,那么字符串 s 无效,返回 False。哈希表的键为右括号,值为相同类型的左括号。当我们遇到一个左括号时,我们会期望在后续的遍历中,有一个相同类型的右括号将其闭合。注意到有效字符串的长度一定为偶数,因此如果字符串的长度为奇数,我们可以直接返回 False,省去后续的遍历判断过程。在遍历结束后,如果栈中没有左括号,说明我们将字符串 s 中的所有左括号闭合,返回True,否则返回 False。

2023-10-17 14:01:30 91

原创 【LeetCode刷题(数据结构与算法)】:合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

2023-10-17 13:24:58 401

原创 【LeetCode(LeetCode刷题经典一百题)】:移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序请注意 ,必须在不复制数组的情况下原地对数组进行操作示例 1:输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]示例 2:输入: nums = [0]输出: [0]

2023-10-17 13:13:53 115

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除