自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 力扣力扣力!707设计链表

/ 链表变为 1->2->3。// 现在,链表变为 1->3。这道题和之前已经实现过的链表没有区别所以就不在这里进行过多赘述,详情请看前几篇关于链表的具体实现。的节点插入到链表中第一个元素之前。在插入完成后,新节点会成为链表的第一个节点。以指示链表中的上一个节点。假设链表中的所有节点下标从。等于链表的长度,那么该节点会被追加到链表的末尾。的节点追加到链表中作为链表的最后一个元素。如果下标有效,则删除链表中下标为。是指向下一个节点的指针/引用。如果是双向链表,则还需要属性。的节点插入到链表中下标为。

2024-10-08 21:05:29 159

原创 力扣力扣力!移除链表元素

所以这里首先想到的就是自己定义一个哨兵位头节点,这样就不用陷入到讨论空各种情况,但是随之而来的是增加了空间复杂度。这里大致分为三步走,第一步定义一个dummynode,第二部进行循环判断是否元素相同,第三步删除返回。所以这里需要注意的是,一开始不能用if来判断条件,必须要用while,是为了应对。如果不用头节点的话,就应该讨论删除的是否是头节点的情况。遍历一遍列表,每找到值相等的时候删除节点,返回头节点。2.当本来不为空,但是全部删除完为空,也应该返回空。时,它会删除这个节点,然后把。如果用了if来判断,

2024-10-07 16:56:36 93

原创 从零实现数据结构第五集:队列的实现

队列的实现可以看成一种特殊的链表的实现,所以和链表的逻辑几乎一样,就不再过多讲述。

2024-10-07 16:23:26 85

原创 从零实现数据结构第四集:栈的实现

【代码】从零实现数据结构第四集:栈的实现。

2024-10-06 15:43:37 126

原创 从零实现数据结构第三集:带头双向循环链表实现

需要注意的是我们不能再结构体里面使用重命名node,只能使用全称,这是因为编译器在当前上下文中并不知道。是什么类型,重命名宏类似的也会在预编译阶段被替换成全称。今天的函数实现和昨天第二集很相似所以注释少了些许。

2024-10-05 20:07:14 209

原创 从零实现数据结构第二集:链表

链表实现

2024-10-04 17:24:48 223

原创 数据结构与算法从0开始第一集:顺序表实现

顺序表的实现

2024-10-03 16:25:11 213

原创 Linux下权限的理解

当我们新建一个文件夹时,基础权限码是0666,当我们创建一个目录文件时,基础权限码是0777(这里的0表示八进制)。可是当我们需要和别人共享一个目录下,完成一定的工作时,这个时候我们两个人都同时拥有可写权限,也就是说,我写的代码可以被别人删掉。同时也意味着,在目录下,删除文件不与文件的权限有关,只与该目录的权限有关。由于三个为一组,也就是说至少需要三位二进制来表示该组的权限,所以这里采用一位八进制来代表一组的权限。,则实际创建的出来的文件权限是:原来的初始权限 &(~umask)。

2023-09-06 14:57:37 30 1

原创 哈希表的简单实现

H_0是通过散列函数Hash(x)对元素的关键码 key 进行计算得到的位置,m是表 的大小。当发生哈希冲突时,这里按照最简单的闭散列法中的线性探测:从发生冲突的位置开始,依次向后探测,直到寻找到下一个空位置为止。但是从本质上来说,这两种方法都是通过寻找下一个空的位置进行占位,没用从根本上解决问题,于是就有了下一种方法:开散列法。该方式即为哈希(散列)方法,哈希方法中使用的转换函数称为哈希(散列)函数,构造出来的结构称。对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置。

2023-08-18 20:43:55 30 1

原创 map和set的封装

由于红黑树的实现需要把T中的数据拿出来进行比较,但是由于这里的T是一个泛型,所以不知道是一个pair还是只有一个key,如果是pair就需要拿到pair.first进行比较,如果是key直接进行比较即可。我们可以看到红黑树通过传入一个模板来实现,实现map和set两个封装只需要传入不同的模板就可以实现。首先,我们明确一点,map和set是由红黑树一颗树来封装的。通过传入的t不同这里的data也就不同,从底层实现不同的封装。map传入的是一个pair,而set只需要传一个值就行。而红黑树的结构定义如下。

2023-08-18 11:18:54 30 1

原创 红黑树的插入实现

父节点为红的情况1体现出红黑树与avl树的不一样,这里先考虑变色,如果叔叔节点存在且为红,就说明最长路径还没到最短路径的两倍,所以先不考虑旋转。先按照二叉搜索树的规则插入节点,并将节点的颜色默认设为红,再看有没有违反红黑树规则,如果违反则看下面的红黑树修改规则。(2)叔叔节点不存在且为黑,旋转+变色,这里对应四种旋转看情况选择(左单旋,右单旋,左右双旋,右左双旋)4. 对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点。3. 如果一个节点是红色的,则它的两个孩子结点是黑色的。

2023-08-18 10:56:40 34 1

原创 avl树的简单实现

avl树的简单实现

2023-08-18 10:54:57 25 1

原创 搜索二叉树的简单实现

【代码】搜索二叉树的简单实现。

2023-08-06 15:32:25 23

原创 list的简单实现

【代码】list的简单实现。

2023-07-27 12:34:28 24 1

原创 vector的简单实现

【代码】vector的简单实现。

2023-07-24 13:20:42 22

原创 string类的简单实现

但是不建议这样使用构造函数,的确这样可以减少两次strlen的复杂度,但是此处的初始化的顺序要和下面声明的顺序要一致,不利于维护与修改,否则就会出现随机值的问题,所以最终建议是将构造的内容一并写入函数体内,也就是第三种方法。第一种:构造函数主要用于c语言风格的string类的构造,先传入一个c语言的char类型指针,再构造一个c++类并使用初始化列表进行初始化,注意这里new的时候要多加一个\0的位子,这种方法的缺陷就是使用了三次o(n)的strlen,复杂度比较高。

2023-07-20 14:30:33 39

原创 c++类和对象:列表初始化,staic成员和友元

这里我们首先明确一点什么叫做构造函数,虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化,构造函数体中的语句只能将其称为赋初值,而不能称作初始化。由于其自身特性,都只有一次初始化机会,所以引用和const类型都是定义的时候就必须初始化,而初始化列表就是成员变量定义的地方,所以引用和const都必须在初始化列表内。声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;static修饰的成员函数,称之为静态成员函数。

2023-07-08 18:04:25 40

原创 c++运算符重载及日期类的基本实现

赋值运算符重载基本特点参数类型:const T&,传递引用可以提高传参效率返回值类型:T&,返回引用可以提高返回的效率,有返回值目的是为了支持连续赋值检测是否自己给自己赋值返回*this :要复合连续赋值的含义赋值运算符只能重载成类的成员函数不能重载成全局函数原因:赋值运算符如果不显式实现,编译器会生成一个默认的。此时用户再在类外自己实现一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,故赋值运算符重载只能是类的成员函数。

2023-07-07 16:05:09 36 1

原创 c++类和对象

1. 声明和定义全部放在类体中,需注意:成员函数如果。

2023-07-04 15:12:29 28

原创 c++ 基础

在汇编过程中把所有的函数名和对应函数的地址汇总成一张符号表,在链接时按照符号表进行调用,而c语言中,符号表中对应的函数名只有函数名本身,而c++中的符号表除了函数名本身还有变量名首字母等等不同的名字修饰。ps:根据右图可以看到,当调用iostream时,分为了istream和ostream,这里我们以ostream举例,下图stream源码中定义了许多重载函数,有int,unsigned int,long等等函数,当使用cout时,会根据传入的参数进行相应的匹配。所以建议在项目开发中使用,像。

2023-07-03 22:20:20 43 1

原创 顺序表接口的简单实现

头插:先把元素往后挪,然后再添加。由于要访问到end+1位元素,所以先进行增容检查,否则会发生越界访问,注意如果从前往后挪则会发生覆盖。的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。尾删:由于可能为空,需要判定,另外只需要size--,让数组访问不到就可以达到删除的效果。完整代码分为定义的头函数,接口实现两个部分,接口实现部分包括了打印销毁等别的基础接口。头删:先判定是否为空,然后从前往后挪元素。1.数组还不存在,需要从0开始创建。2.数组内存不够用,需要进一步增容。

2023-04-12 15:49:46 53 1

空空如也

空空如也

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

TA关注的人

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