![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和STL标准库的模拟实现
文章平均质量分 76
对于C++各种数据结构的模拟实现
我要满血复活
厦门大学计算机科学与技术学生,简单记录学习路程
展开
-
单链表创建以及应用
创建链表。原创 2023-12-17 16:43:00 · 383 阅读 · 1 评论 -
双向带头循坏链表的创建
综上可以只需要创建LTInsert和LTErase函数就可以快速创建一个链表。因为为循坏链表,所以需要从头结点的下一个结点开始,到头结点结束。结构体如下,其中储存两个指针,存前一个以及后一个结点的地址。双向带头循坏链表的结构。原创 2023-12-24 20:42:21 · 343 阅读 · 0 评论 -
string的模拟实现
1.string类对象的成员变量2. string类对象的常见构造(constructor)函数名称 功能说明 string() (重点) 构造空的string类对象,即空字符串 string(const char* s) (重点) 用C-string来构造string类对象 string(size_t n, char c) string类对象中包含n个字符c string(const string&s) (重点) 拷贝构造函原创 2024-05-16 20:14:19 · 420 阅读 · 0 评论 -
vector的模拟实现
1. vector是表示可变大小数组的序列容器。2.就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3.本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。原创 2024-05-25 20:34:52 · 310 阅读 · 0 评论 -
list的模拟实现
1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与非常相似:最主要的不同在于是单链表,只能朝前迭代,已让其更简单高效。4.与其他的序列式容器相比(arrayvectordeque)list通常在任意位置进行插入、移除元素的执行效率更好。5.与其他序列式容器相比,list和。原创 2024-05-30 21:16:43 · 272 阅读 · 0 评论 -
stack的模拟实现
虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为。原创 2024-06-03 09:14:18 · 774 阅读 · 0 评论 -
queue的模拟实现
底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。中操作,其中从容器一端插入元素,另一端提取元素。实例化指定容器类,则使用标准容器deque。默认情况下,如果没有为。队列是一种容器适配器,专门用于在。:返回队列中有效元素的个数。:返回队头元素的引用。:返回队尾元素的引用。原创 2024-06-03 09:18:29 · 191 阅读 · 0 评论 -
priority_queue的模拟实现
底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素。提供一组特定的成员函数来访问其元素。中放自定义类型的数据,用户需要在自定义类型中提供。弹出,其称为优先队列的顶部。:返回容器中第一个元素的引用。:返回容器中有效元素个数。:在容器尾部插入元素。原创 2024-06-03 19:49:14 · 258 阅读 · 0 评论 -
C++二叉搜索树
或者是具有以下性质的二叉树。原创 2024-07-20 17:49:41 · 289 阅读 · 0 评论 -
C++ AVL树
二叉搜索树虽可以缩短查找的效率,但。因此,两位俄罗斯的数学家和E.M.Landis在1962,即可降低树的高度,从而减少平均搜索长度。一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:。我们规定平衡因子_bf为右子树的高度减去左子树的高度,且平衡因子_bf的取值范围为-1到1,则一颗树有如下平衡因子为01-1的三种情况。原创 2024-07-24 15:32:43 · 777 阅读 · 0 评论 -
C++ 红黑树
是一种,但。通过对,因而是的。1.2.3.4.5.如果我们要插入的结点的父亲节点为红色,我们就会出现连续的红色节点,这时我们就需要进行调整了。原创 2024-07-24 20:43:50 · 913 阅读 · 0 评论 -
C++ set
1. set是按照一定次序存储元素的容器2.在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改元素总是const),但是可以从容器中插入或删除它们。3.在内部,set中的元素总是按照其内部比较对象类型比较所指示的特定严格弱排序准则进行排序。4. set容器通过key访问单个元素的速度通常比容器慢,但它们允许根据顺序对子集进行直接迭代。5. set。原创 2024-07-25 21:23:09 · 1083 阅读 · 0 评论 -
C++ map
1. map是关联容器,它按照特定的次序按照key来比较存储由键值key和值value组合而成的元素。2.在map中,键值key通常用于排序和唯一地标识元素,而值value中存储与此键值key关联的内容。键值key和值value的类型可能不同,并且在map的内部,key与value通过成员类型value_type绑定在一起,为其取别名称为3.在内部,map中的元素总是按照键值key进行比较排序的。4. map。原创 2024-07-25 22:11:33 · 787 阅读 · 0 评论 -
C++哈希表
1.概念顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O() ,搜索的效率取决于搜索过程中元素的比较次数。理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。当向该结构中:1. 插入元素, 根据待插入元素的原创 2024-07-26 17:21:13 · 906 阅读 · 0 评论 -
C++ unordered_map
是存储键值对的关联式容器,其允许通过key快速的索引到与其对应的value。2.在中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。3.在内部没有对按照任何特定的顺序排序为了能在常数范围内找到key所对应的value将相同哈希值的键值对放在相同的桶中。容器通过key访问单个元素要比map快,但它通常在遍历元素子集的范围迭代方面效率较低。实现了直接访问操作符,它允许使用key作为参数直接访问value。6.原创 2024-07-27 18:49:51 · 1175 阅读 · 0 评论 -
C++ 位图
数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0 代表不存在。但是其有40亿个数据,而且是整型,最后估算下来,光是数据就占用了十六个G,何况还要用红黑树,哈希表这样的结构存储下来,这是不现实的。1. 面试题 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在 这40亿个数中。所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。原创 2024-08-01 10:42:16 · 402 阅读 · 0 评论 -
C++ 布隆过滤器
我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉 那些已经看过的内容。问题来了,新闻客户端推荐系统如何实现推送去重的?用服务器记录了用 户看过的所有历史记录,当推荐系统推荐新闻时会从每个用户的历史记录里进行筛选,过滤掉那 些已经存在的记录。如何快速查找呢?1. 用哈希表存储用户记录,缺点:浪费空间2. 用位图存储用户记录,缺点:位图一般只能处理整形,如果内容编号是字符串,就无法处理了。3. 将哈希与位图结合,即布隆过滤器。原创 2024-08-01 22:59:20 · 642 阅读 · 0 评论