- 博客(44)
- 收藏
- 关注
原创 【Linux】进程信号
信号是什么?在讲解Linux中的信号前,首先我们来了解一下我们生活中的信号。红绿灯就是我们生活中信号的一种,我们就可以相当于进程,当我们看到绿灯时,我们就会通行,而看到红灯时,就是停下来等待,我们之所以会这么做,那是因为能看到红绿灯所发出来的信号。当然,当我们看到红绿灯时,也不一定就会通行,我们也有可能又更重要的事情要做。那么,在Linux中,信号又是什么呢?我们先来写一份程序来讲解。return 0;当这个程序运行起来的时候,会进行一个死循环。
2024-08-30 15:52:29 1124
原创 【Linux】进程间通信(管道通信、共享内存通信)
这五个字很好理解,就是。那么要有进程间通信呢?在这里再举一个例子,例如在网络中,我们通过聊天软件和远处的别人进行聊天就是一种进程间的通信,是你在这边的进程和他在那边的进程之间的通信。那么进程间通信又有那些呢?我们大致可以分为。但是在这篇博客中,,第三种会在后面与网络有关的博客中讲到。那么我们应该如何理解呢?
2024-08-06 16:55:16 1116
原创 【Linux】基础IO
如果学过其他编程语言,那应该都知道文件操作以及IO,那么在linux中,文件操作又是如何进行的呢?以及我们应该如何理解文件操作和IO?
2024-07-22 20:33:31 1040
原创 【Linux】进程的基本概念(以及进程地址空间的初步了解)
根据书本上的概念来解释,一个运行起来被加载到内存中)的程序称为进程。光这样一句话很难体会到什么是进程,所以我们来展开讲一下。上面的问题,我们先放一放,我们来解释一下什么是地址空间。在学习C/C++的时候,应该都见过这个图,为什么这个图叫做C/C++的内存分布,而不是内存条的内存分布?那既然有C/C++的内存分布,那是不是说明还有其他语言的内存分布,为什么同一块内存条上,不同的语言会有不同的内存分布呢?那是因为这个C/C++内存分布其实是虚拟地址,这个内存分布的地址不是真实的,这个虚拟地址就叫做。
2024-07-10 15:13:48 1005
原创 【C++】map和set的模拟实现
在本篇博客中,作者将会带领你C++STL库中的,其中我只实现一些比较重要的成员函数,在进行之前,你需要先懂得,因为map和set的。
2024-07-09 16:29:34 844
原创 【数据结构】红黑树实现详解
红黑树是一棵二叉搜索树,它的结点不是黑的就是红的,其中它有一个非常重要的通过对任何一条从根到叶子的路径上各个结点的着色控制,保证了红黑树没有一条路径会比最短路径长出两倍,达到接近平衡的特点。看到这句话,可能你还云里雾里的,但是不要怕,简单的来说,红黑树的特点就是:找出树中最短的路径和最长的路径,其中这条最长路径的长度不会大于最短路径长度的两倍。如下图所示:在这棵红黑树中,最短的路径是最左边的那条,长度为3,最长的路径是最右边的那条,长度为4,即4 < 2*3,最长的路径不会大于最短路径的两倍。
2024-06-17 19:15:39 844
原创 【数据结构】AVLTree实现详解
在二叉搜索树的博客中,我们提到了,当插入的数据有序或者接近有序的时候,二叉搜索树会退化成单支树,导致其效率变低,所以为了解决这种情况,于是我们提出了AVLTree,即二叉平衡搜索树。如下图就是一棵二叉搜索树退化成的单支树。那么AVLTree又是如何实现使二叉树搜索树不会退化成单支树的呢,它又是如何保证效率的呢?因为AVLTree严格的要求左右子树的高度差不能大于1,且每一棵子树也一样。如下图所示。
2024-06-08 12:45:11 1285 2
原创 【C++】二叉搜索树
首先我们来看一下树结点的定义。//成员变量K _key;//成员函数Blog_TreeNode(const K& key)//构造函数:_key(key){}树结点的定义不是很难,就二叉树常规的定义即可。我们可以把树结点封装到一个Blog_Tree的类中,在类中实现它的成员函数。//typedef一下,这样在类中可以使用Node来代替Blog_TreeNodepublic://构造函数{}private://成员变量为一个根节点的指针。
2024-06-01 12:45:38 1248
原创 【C++】多态(多态的原理)
那么知道了什么是多态,现在就来讲解一下多态是如何定义和实现的。首先我们直接来看一段构成多态的代码。看到这里,可能会有同学以及有点分不清了,因为多态有重写,继承有重定义,同时函数又有重载,初学者可能很容易搞混。所以在这里我们进行一个讲解。两个函数在同一个作用域中。函数名相同,参数不同(类型不同,顺序不同,个数不同)。两个函数分别在基类和派生类中。两个函数都是虚函数。函数名、返回类型、参数列表相同(两个例外除外)。两个函数分别在基类和派生类中。函数名相同。不符合重写就是重定义。
2024-05-23 21:51:57 1074
原创 【C++】stack、queue和priority_queue的模拟实现
容器,适配器,空间配置器,仿函数,迭代器,算法。其中像这种数据结构叫做容器,而像这种数据结构叫做适配器。为什么呢?因为stack和queue是通过deque这个容器转换过来的,也就是说,将deque容器的成员函数转换成stack和queue的成员函数通过查看C++的手册,发现stack和queue类中有一个模板,其中第二个模板参数就是deque,即在stack和queue类中,是通过deque这个容器来实现的。可能看到这里,还有同学不懂适配器到底是什么,那么在这里通过几张图来解释一下。
2024-05-06 19:18:21 820
原创 【C++】list的模拟实现
在模拟实现list之前,我们来梳理一下list的基本结构。list是一个的链表。所以对list的模拟实现,我们可以先,然后再在list类中去存放来实现。
2024-04-27 13:04:27 1356
原创 【C++】模板进阶
所以模板函数不适合分离编译,如果是一个模板函数,则函数的定义和声明要写到一个文件中。【优点】1.模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2.增强了代码的灵活性【缺陷】1.模板会导致代码膨胀问题,也会导致编译时间变长2.出现模板编译错误时,错误信息非常凌乱,不易定位错误。
2024-04-27 10:25:39 1062
原创 【C++】二维数组传参方式
最近刚开始刷剑指offer,刚做到第三题的时候,发现C++二维数组的传参方式和C语言,所以在这篇博客中,会列出C/C++常见的二维数组传参方式。(本方式和代码都是基于vs环境所编写)
2024-04-17 23:46:59 2441
原创 【C++】string的模拟实现
在本篇博客中,作者将会带领你的STL中的string类的。至于string的常规使用,这里不做讲解。string类的c++参考文档。
2024-04-17 21:20:42 1124
原创 【C++】模板初阶
也可以比作是一个,通过这个模具能做出的东西。单靠这样解释,很难解释的通,所以接下来举个例子的解释。如果我们想要实现一个符合,我们可以使用来实现。虽然函数重载确实可以帮我们做到,但是这样做未免太麻烦了,的函数要写很多份,而且如果有新的类型需要实现这个功能,又要多写一份,这样做过于麻烦,那么有没有一个方法可以很好的解决呢,答案是模板。
2024-04-04 23:08:28 623
原创 【C++】为什么能实现函数重载
从C语言一路学到C++的途中,C++语言C语言相比,多了个函数重载,那么函数重载是如何实现的呢,为什么C语言无法支持,在本篇博客中,将会讲解C++为何能实现函数重载。
2024-03-31 10:56:20 383
原创 【C++】类与对象 (中篇)(6个默认成员函数)
如果一个类中什么成员都没有,叫做空类,那么空类真的就什么都没有吗,其实并不是,类在什么成员都不写的时候,编译器会默认生成6个成员函数。默认成员函数:在用户没有显示实现时,编译器会默认生成的成员函数就做默认成员函数。
2024-03-16 15:37:12 947
原创 【C++】类与对象(上篇)
/用struct定义类int _year;int _month;int _day;//用class定义类class dateint _year;int _month;int _day;在C++中,有两种方法来定义类,但是在C++中,用class来定义类更常见。知道了C++中多了类,那么类一般是如何定义的?一般来说,类的定义有两个方式。类的成员函数的声明和定义都放在类中。int _month;int _day;
2024-03-05 22:37:15 973 1
原创 【C语言】外排序(归并思想)
我们通常写的排序都是内排序,即数据都是在内存中直接进行排序的,如以下几篇博客介绍的排序都是内排序。【C语言】排序(一)(直接插入排序、希尔排序)-CSDN博客【C语言】排序(二)(选择排序,堆排序)-CSDN博客【C语言】排序(三)(快速排序:递归与非递归实现)-CSDN博客【C语言】排序(四)(归并排序:递归与非递归实现)-CSDN博客那么外排序到底是什么?当我们需要对一堆数据进行排序的时候,如果这些数据非常的多,数据多到不能一下子全部加载到内存中的时候,我们就需要使用外排序。
2024-02-22 15:33:03 945 1
原创 【C语言】堆的实现(建堆、堆的基本操作、堆排序、TOK问题)详解
大堆什么是堆?堆是一种为的数据结构,堆又分为两种,一种是,一种是。什么是完全二叉树?完全二叉树是,除了最后一层外,其他层都是满的,而且最后一层的结点都靠左排列。什么是大堆?什么是小堆?大堆为都大于它的左子树结点和右子树结点的值。小堆为都它的左子树结点和右子树结点的值。堆有什么用?堆可以用来选数、排序等且时间复杂度非常低。
2023-12-19 10:46:07 3242 1
原创 【C语言】反转单链表
就会无法找到,所以需要三个指针分别记录前、中、后结点。④.整体移动prev、head、tail。②.tail指针指向head的下一个。,改变当前结点的连接关系后,则它的。③.改变head的连接关系。①.prev指针先指向空。①利用三个指针分别指向。
2023-12-09 21:58:32 260 1
原创 【C语言】结构体内存对齐
偏移量为0对齐到某个数字(对齐数)的整数倍较小值占用字节最大字节数默认对齐数较小值(这里说的不是很好,详细解答看下面的例子)
2023-10-31 00:04:26 101 5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人