自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 List模版的模拟实现

对于 end() 函数,它返回一个指向链表尾后位置的迭代器。同样地,由于该函数是在常量函数中定义的,因此返回的是一个 const_iterator 类型的常量迭代器。它通过 _head 获取头结点的地址,并将其传递给 const_iterator 类的构造函数,返回一个指向尾后位置的常量迭代器。对于非常量版本的 begin() 和 end() 函数,它们的实现方法与常量版本相似,只不过返回的是一个 iterator 类型的迭代器,用于修改链表元素的值。

2025-03-15 21:23:53 8

原创 C++模版vector模拟实现

begin()和end():返回迭代器,用于指向vector的起始和结束位置。cbegin()和cend():返回常量迭代器,用于指向vector的起始和结束位置。capacity():返回vector的容量,即分配的内存空间大小。size():返回vector中元素的个数。resize():调整vector的大小,如果n小于当前容量,则直接修改size()的值;如果n大于当前容量,则先通过reserve()函数进行内存的重新分配,再插入新的元素。

2025-03-09 13:22:02 723

原创 面向对象的三大特性之一(继承)

在前面的博客中,我简单介绍了类与对象的概念及其三大特性;而在本次博客中,我将用C++语言实现面向对象语言的三大特性之一继承。继承的概念继承是一种机制,该机制是面向对象程序设计中使代码可以复用的最重要的手段。有了该机制,让我们能够在保持原有类特性(基类)的基础上进行扩展,扩展产生的类,我们称作为派生类继承呈现了面向对象程序设计中的层次结构,体现了由简单到复杂的认知过程。

2025-03-08 18:17:28 784

原创 键值对(C++实现)

键值对(Key-Value Pair)是一种数据结构用于存储和表示两个相关联的值。在键值对中,一个值被关联到一个唯一的键上,通过键可以快速地访问和获取对应的值。

2025-03-06 23:29:57 767

原创 C++语言实现unordered_map和unordered_set的模拟实现

unordered_map和unordered_set的模拟实现是通过封装哈希表来实现的。

2025-03-06 21:42:20 949

原创 模块化代码(java实现)

模块化。

2025-02-11 11:15:25 1021

原创 用C++语言实现set和map的封装

在C++标准模板库(STL)中,容器是用于存储和管理数据的类模板,它们可以分为两大类:序列式容器和关联式容器。序列式容器:底层为线性序列的数据结构,里面存储的是元素本身。动态数组,支持随机访问,尾部插入和删除效率高,但中间插入和删除效率低。双端队列,支持在两端快速插入和删除,内部由多个数组片段组成,不连续。双向链表,支持在任意位置快速插入和删除,不支持随机访问。单链表,只支持向前遍历,用于只需要单向遍历的场景。固定大小的数组,支持随机访问,大小在编译时确定。

2025-02-02 18:34:45 818

原创 C++中迭代器的介绍

在C++中,迭代器是一种对象,它能够用来遍历容器(如std::liststd::set等)中的元素。迭代器提供了一种统一的方式来访问容器中的元素,而不管容器的内部实现细节如何。迭代器的行为类似于指针,可以使用运算符来解引用,获取当前指向的元素的值,也可以使用++运算符来移动到下一个元素。迭代器也是一个变量,相当于容器和操纵容器的算法之间的中介。通过迭代器可以读取它指向的元素,*迭代器名就表示迭代器指向的元素。通过非常迭代器还能修改器指向的元素。迭代器都可以使用++操作。

2025-01-17 22:47:17 626

原创 布隆过滤器的简单介绍

布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否在一个集合中。它由一个位数组和一组哈希函数组成。布隆过滤器的主要优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误判率和删除困难。布隆过滤器的原理基于位数组和哈希函数。当一个元素被加入集合时,通过多个哈希函数计算出多个哈希值,并将位数组中对应的位置置为1。查询时,同样通过这些哈希函数计算哈希值,然后检查位数组中对应的位置是否都为1。如果有任何一个位置为0,则该元素一定不在集合中;

2025-01-13 20:45:35 335

原创 简单实现哈希表

哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。

2025-01-13 20:02:24 341

原创 C++类与对象基础概念

/ 定义一个名为Rectangle的类public:// 成员变量(属性)// 成员函数(方法)// 创建Rectangle类的对象// 设置对象的属性// 调用对象的方法std::cout << "矩形的面积: " << rect.getArea() << std::endl;std::cout << "矩形的周长: " << rect.getPerimeter() << std::endl;return 0;类里定义的函数最好是定义和声明分离,在定义处要指明类域。

2025-01-04 17:03:34 894

原创 C++中const的用法

这些是类中的数据变量,使用const关键字定义。它们在声明期间未初始化。它们的初始化在构造函数中完成。

2024-12-22 12:40:45 891

原创 (C++)命名空间

从上面可知命名空间的作用,既然命名空间能够有效防止命名冲突,那该如何定义命名空间?命名空间的定义使用关键字namespace,后跟命名空间的名称,然后是一对花括号,其中包含了命名空间的内容。//展开std命名空间namespace A1 {//定义一个名为A1的命名空间int a = 0;int b = 20;//变量void Add()//函数struct TestNode//结构体int test1;namespace A2 {//定义一个名为A2的命名空间。

2024-12-19 09:37:37 452

原创 数据结构—图

在线性表中,数据元素之间是被串起来的,仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继。在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关。而图是一种较线性表和树更加复杂的数据结构。在图形结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。图(Graph)是由顶点的有穷非空集合V(G)和顶点之间边的集合E(G)组成,通常表示为: G=(V,E),其中,G表示个图,V是图G中顶点的集合,E是图G中边的集合。

2024-12-17 11:37:50 963

原创 数据结构—红黑树

‌红黑树是一种自平衡的二叉查找树,主要用于实现关联数组。‌它通过特定的操作来保持树的平衡,从而确保在插入和删除操作后,树的性能不会显著下降。// 定义红黑树节点的颜色RED,BLACK// 红黑树的节点结构int data;bool color;Node* left;

2024-12-11 09:24:51 997

原创 数据结构—AVL树

按照平衡因子的规则,如果新节点插入到了父节点的左侧,那么父节点的平衡因子-1,如果新节点插入到了父节点的右侧,那么父节点的平衡因子+1;以上,便是新增节点的父节点平衡因子可能的变化情况。在调整失衡的AVL树时,我们需要频繁的访问父节点,所以在AVL树中我们需要使用三叉链,因此AVL树的节点除了包含左右子节点的指针,还需要一个指向父节点的指针。AVL树的删除可以使用二叉搜索树的方式,先用二叉搜索树的方式来对目标节点进行删除,再判断是否失衡,如果失衡则进入旋转操作,旋转后得到的新AVL树就是删除后的AVL树。

2024-12-10 10:37:55 801

原创 数据结构——二叉树

kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki = K2i+2) i = 0,1,2…现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。i=0,i为根节点编号,无双亲节点。

2024-12-05 22:49:24 808

原创 数据结构—队列

队列作为一种特殊的线性表,也同样存在两种存储结构:顺序存储结构和链式存储结构,可以分别用数组和链表来实现队列。方案一:设置一个计数器,开始时计数器设为0,新元素入队时,计数器加1,元素出队,计数器减1。为了解决可能出现的假溢出现象,使得队列中的储存空间可以得到充分利用,一个巧妙的方法就是使用。方案二:保留一个元素空间,当队尾指针指的空闲单元的后继单元是队头元素所在单元时,队满。是只允许在一端进行插入操作,在另一端进行删除操作的线性表,简称“队”。,新入队的元素就成为了队列的队尾元素。

2024-12-03 15:29:58 1169

原创 数据结构——栈

对于空间性能,顺序栈需要事先确定一个固定的长度,可能会存在内存空间浪费的问题,但它的优势是存取时定位很方便,而链栈则要求每个元素都有指针域,这同时也增加了一些内存开销,但对于栈的长度无限制。所以它们的区别和线性表中讨论的一样,如果栈的使用过程中元素变化不可预料,有时很小,有时非常大,那么最好是用链栈,反之,如果它的变化在可控范围内,建议使用顺序栈会更好一些。具体概念是指:利用栈底位置相对不变的特征,可让两个顺序栈共享一个一维数组空间,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延伸。

2024-12-02 21:57:55 712

原创 数据结构—堆

向下调整算法需要一个父节点parent,此处为举例假设根节点为 12 ,并计算出其左右子节点 5 和 2 ,然后比较左右子节点大小,选取其中一个子节点(小堆为子节点较小值,大堆为子节点较大值,此处为较小值 2 ) ,将此子节点与父节点进行比较,若不满足堆结构条件则交换。思路是:找到以子节点 0 为祖先结点的路径,在这条路径上,寻找其父节点 5 ,比较其大小,若不满足堆结构条件,则交换它们的值。对于此堆,1. 0 和 5进行交换,并将下标为4的位置为作为子节点继续向上调整,此时其数据为0。

2024-11-30 19:19:50 575

原创 有关顺序表的知识总结

顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。命名了一个名字为SQlist的顺序表,其中book* data为顺序表中的数据类型,length为顺序表的长度。在主函数中引用定义一个顺序表再引用该函数,并将顺序表的指针传入函数。七、查找顺序表中数据的操作。

2024-11-26 10:59:28 466

原创 offset宏的实现

本篇博客主要讲一下在鹏哥C语言学习中关于offset宏的实现的代码;一、offset宏的实现。

2024-11-26 10:08:12 209

原创 C语言预处理知识

在C语言学习中,我们通过预处理这节课了解到;我们用C语言直接写出来的代码是不能被计算机进行识别的,需要被翻译为二进制语言才能被计算机收到并执行;这个过程就叫做翻译。翻译过程一般有以下几步:预处理:头文件展开,去注释,宏替换,条件编译等。编译:将C语言翻译成汇编语言汇编:将汇编语言转化为可重定向目标文件(可被链接,已经是二进制,但不是可执行文件)链接:自身程序+库文件进行关联,形成可执行程序。

2024-11-20 08:59:34 594

原创 洛谷P1402题(有关最大上升子序列的问题)

本题实际上是找一个按从小到大连续的数列,但我确错认为是找重复出现的数字,并去掉就是按顺序排列的(😭),完全错误。做法是通过双重循环遍历数组,统计每个元素的出现次数,并找出出现次数最多的元素,最后输出这个元素的出现次数。知识总结:最大上升子数列(摘自https://blog.youkuaiyun.com/pangyou3s/article/details/137000887,胖柚工作室)由上述知:本题是找一个最长的按从小到大排序的数列,实际上就是找n个数中的最大上升子数列。一个数,最长连号的个数。第一行,一个整数 n。

2024-11-19 11:39:40 201

原创 分享一篇在洛谷刷题看到的题解(底下附上了作者名)

但由于两维数据都在 105105 的范围内,我们可以通过一些比较玄妙的方法,将一维数据乘上 105105 再加上另一维数据,把两个 intint 类型的数据压成一个 long longlong long 类型的数据,本人在比赛中使用的就是这种方法。这就需要我们另寻他法压缩下标,这里介绍一个好东西叫做哈希,其核心理念就是通过一个函数来把字符串或数字压缩到一个较小的范围内,至于实现方法请读者自证请读者另寻其他文章,luogu上有哈希的模板题,题解区应该有不少文章比我写得好,我在这里就不说了。

2024-11-19 10:44:39 538

原创 C语言文件操作

ab+:以二进制方式读写方式打开文件,如果文件不存在则创建文件,如果文件存在则在文件末尾添加数据。ab:以二进制方式追加方式打开文件,如果文件不存在则创建文件,如果文件存在则在文件末尾添加数据。wb+:以二进制方式读写方式打开文件,如果文件不存在则创建文件,如果文件存在则清空文件。wb:以二进制方式只写方式打开文件,如果文件不存在则创建文件,如果文件存在则清空文件。wt:以文本方式只写方式打开文件,如果文件不存在则创建文件,如果文件存在则清空文件。rb+:以二进制方式读写方式打开文件,文件必须存在。

2024-11-15 23:17:06 771

原创 数据的存储

大端(存储)模式:指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端(存储)模式:指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。为什么会有大小端模式之分呢这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8 bit。

2024-11-12 11:17:09 1063

原创 说说在训练赛中的问题

一、新生赛C题介绍C题是codeforce上的1651A题考虑一个淘汰赛锦标赛,有2n2n名运动员参加。这些运动员的编号从11到2n2n。比赛分为nn个阶段。在每个阶段,运动员被分成一对,使得每个运动员恰好属于一对。在每一对中,运动员互相竞争,只有一名获胜者。每对中的获胜者进入下一阶段,被击败的运动员被淘汰出比赛。下图描述了有n=3n=3名运动员参加的比赛方式。你的任务是:给定整数nn,确定赢得比赛的运动员的编号。

2024-11-07 11:34:05 768

原创 C语言循环结构介绍

循环结构循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。它由循环体中的条件,判断继续执行某个功能还是退出循环。根据判断条件,循环结构又可细分为以下两种形式:先判断后执行的循环结构和先执行后判断的循环结构。

2024-11-06 20:28:30 1438

原创 洛谷题目ISBN号码中的问题

1.ISBN号码题ISBN题在洛谷题单分支结构中的最后一题,难度为普及;

2024-11-05 11:32:32 876

原创 C/C++中的内存对齐原则

结构体最后(重要):视结构体中最大类型是哪一个,如果是像 int 类型那样是 4 个字节的,并且结构体的结尾地址不满足 4 的倍数的话,向离最近的 4 的倍数地址补齐;如果是像 double 类型那样是 8 个字节的,并且结构体的结尾地址不满足 8 的倍数的话,向离最近的 8 的倍数地址补齐;结构体嵌套:子结构体的成员变量起始地址要视子结构体中最大变量类型决定,比如 struct a 含有 struct b,b 里有 char,int,double 等元素,那 b 应该从 8 的整数倍开始存储。

2024-10-27 13:41:47 1023

原创 链表知识梗概

如果要删除的是第一个节点,则需要保存链表首节点的地址在下一个节点的地址中;如果删除的是中间节点,则找到中间节点的前一个节点,让前一个节点的指针域保存这个节点的后一个节点的地址即可。步骤:先对比第一个节点的数据域看是否有想要的数据,如果是就直接返回,如果不是则继续寻找下一个节点,如果到达最后一个节点都没有匹配的数据,那么就说明要查找的数据不存在。第二步:先找到链表中的最后一个节点,然后让最后一个节点的指针域保存新插入节点的地址,新插入节点的两个指针域,一个保存上一个节点的地址,一个保存NULL。

2024-10-26 13:41:16 828

原创 三个重要函数:strcmp函数,strcat函数,strcpy函数

strcpy函数的目的是将source覆盖拷贝到destination,那我们只要在开始时将source的值赋值给destination就行了,结束后只要在destination的位置上添上'0'就行了。总结:strcmp,strcat和strcpy这三个函数都是C语言中三种重要的函数,涉及地址转换,拷贝,字符串等多个知识点,需要重点掌握。strcmp函数主要是用来比较两个字符串的大小的函数,官方来说就是调用来进行计算字符长度后再进行比较的一种函数。第一个字符串小于第二个字符串,则返回小于0的数字。

2024-10-23 22:23:05 782 2

原创 介绍结构体(修改)

(6) 结构体指针--------------结构体成员是指针类型变量(重点!(8)结构体指针--------------结构体成员是指针类型变量(重点!(6)结构体指针--------------指向结构体变量的指针(重点!(7)结构体指针--------------指向结构体数组的指针(重点!(4)结构体指针--------------指向结构体变量的指针(重点!(5)结构体指针--------------指向结构体数组的指针(重点!(9)typedef关键字与结构体、结构体指针 (超重点!

2024-10-22 10:53:23 966

原创 介绍结构体

介绍结构体,用于小组会议

2024-10-20 19:08:45 491 3

原创 C语言题目成绩输出

int main()int id=0;scanf("%d;return 0;

2024-10-06 11:13:40 392

原创 while循环

int main()doi++;return 0;

2024-09-17 11:59:06 278

原创 C语言应用——BMI指数

int main()return 0;

2024-09-14 18:27:11 393 2

原创 C语言——常量

int main()//30;//3.14;//'w';//"abc";a = 10;return 0;int main()return 0;enum colorRED,GREEN,BLUE,int main()//三原色return 0;

2024-09-14 18:26:26 256

原创 三角形判定

int main()int a=1;int b=1;int c=1;return 0;

2024-09-14 18:25:01 142

空空如也

空空如也

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

TA关注的人

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