- 博客(18)
- 收藏
- 关注
原创 Unordered_map和Unordered_set的底层实现(C++)
应用链地址法处理溢出的情况时需要增设链接指针,看起来似乎增加了存储开销,但是事实上由于开地址法必须保持大量的空闲空间以确保搜索的效率,而表项所占的空间又比指针大很多,所以使用链地址法比开放空间法更节省存储空间。
2024-07-27 10:33:39
709
原创 红黑树的简单实现(C++)
红黑树是一种二叉搜索树,但是在每个结点上增加一个表示该点颜色的存储位,可以是Red或者Black,通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,相对于AVL树来说,红黑树是平衡。
2024-07-16 16:42:55
899
原创 AVL树的C++实现
首先我们要实现的是关联式容器,与序列式容器不同,其里面存储的是<key,value>的结构的键值对,这种存储在数据检索时比序列式容器的效率更高。其次,我们构造一个三叉链,除了定义两个孩子结点,还需要一个指向父亲的结点。接着,我们还需要一个平衡因子,方便我们监视和调整结点的子树的高度以满足平衡。所以我们给出下列类模板//三叉链int _bf;//balance factor平衡因子//存储的键值对, _bf(0), _kv(kv){}
2024-07-15 15:21:04
720
原创 STL—vector类的简单实现
上次介绍了STL的string类,这次介绍一下STL中的vector,vector类似于数据结构中的顺序表,那么string也是一个数组,它与vector的区别是什么呢?首先对于string类,因为其是字符数组,里面存有'\0',其次其可以实现字符的比较或者'+='之类的操作符重载。而vector里没有’\0‘,'+=',因为’+=‘对于其毫无意义。1、vector是一个表示可变大小数组的序列容器。
2024-07-04 21:52:35
984
原创 STL-string类的实现
string就是字符串的意思,是用来表示字符序列的类,是C++用来代替char 数组的数据结构,里面封装了一些关于操作字符串的方法,该string类的接口与常规容器的接口基本相同,同时再添加了一些专门用来操作string的常规操作。但是不能操作多字节或者变长字符的序列。所以综上所述,我们就可以将string类理解为一个数组,只不过存储在该数组中的元素类型为char类型,且其大小可以实现动态增长,而且在数组末尾隐藏了'\0'
2024-06-27 16:22:40
695
原创 常见的排序算法
1)如果元素集合越接近有序的话,则直接插入排序算法的时间效率越高2)时间复杂度为考虑最坏的情况,对于一个有着n个元素的集合,则第二个元素需要一次排序,第三个需要两次...第n个元素需要n-1次,利用等差数列求和公式可以得出其时间复杂度。3)空间复杂度为4)稳定性:稳定1)希尔排序是对直接插入排序的优化2)当gap>1时进行的排序都是预排序,其目的是让数组更加接近有序。当gap=1时,数组已经接近有序了,这样就很快。对于整体而言,可以达到优化的效果。
2024-05-31 17:07:37
642
原创 堆的C语言实现
如果有一个元素的集合,,将其所有的元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足且且)i=0,1,2...,则称为小堆(大堆)。将根结点最大的堆叫做最大堆或者大根堆,反之,根结点最小的堆叫做最小堆或者小根堆。
2024-05-29 20:51:36
633
原创 队列的C语言实现
队列是只允许在一端进行插入数据操作,在另一端进行删除数据的操作的特殊线性表,队列具有先进先出(FIFO)。进行插入操作的一端称为队尾,进行删除操作的一端称为队头。
2024-05-27 15:55:21
153
原创 栈的C语言实现
栈是一种的特殊的线性表,只允许在固定的一端进行插入和删除操作。进行插入和删除操作的一端称为栈顶,另一端称为栈底。栈里面的元素遵守后进先出(LIFO)的规则。
2024-05-27 15:37:07
279
原创 链表的实现
链表是一种不同于顺序表的结构,其是一种物理存储结构上非连续、非顺序的存储结构,但是一种逻辑上连续的结构,其数据元素的逻辑顺序是通过链表中的指针链接次序实现的。如图所示,链式结构在逻辑上是连续的,但是在物理上不一定连续。现实中的结点一般都是从堆上申请出来的,但是从堆上申请出来的空间是按照一定的策略来分配的,两次申请的空间可能是连续的但是也可能是不连续的。
2024-05-26 19:58:06
383
原创 删除有序数组中的重复项
给你一个非严格递增排列的数组 nums 请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。更改数组nums,使nums的前 k 个元素包含唯一元素,并按照它们最初在nums中出现的顺序排列。nums的其余元素与nums的大小不重要。
2024-04-24 21:31:07
186
原创 顺序表删除元素
然而这道题目我们可以这样做考虑:使用两个指针,prev和cru,使他们都从数组的头开始遍历,如果prev指向的数字不是目标元素val,则将prev指向的元素赋值给cru,如果是val的话,只让prev向后走并判断下一个是否是目标元素,如果是的话接着往下走直到遇到不是目标元素的数字,并将它赋值给cru。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。如果没有这个要求的话,我们可以考虑新建立一个数组,然后遍历原来的数组,对于不是Val的数字可以放在新数组里。
2024-04-24 20:31:02
285
原创 实现返回二进制中1的个数
我们知道按位与操作符(&)的作用是对两个数的二进制位进行操作,同一二进制位上的数字同为1则按位与结果为1,其他情况为0。所以利用这个特点,我们想要知道一个数的二进制位的1的个数,我们只需要对它的二进制位每次向右利用移位操作符每次移动一位然后对其进行按位与1操作,这样如果该位是1,则与1的二进制位最后一位1按位与后仍然是1。最后判断1的个数即为该数二进制位中1的个数。
2024-04-13 17:29:33
141
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人