自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】——AVL树

插入数据要更新平衡因子,如果高度差大于一,就需要通过旋转平衡。和二叉搜索树相似,AVL树多了一个平衡因子。AVL树是在平衡二叉树的基础上改进的。

2024-10-09 19:31:44 224 2

原创 【C++】——set和map的使用

multimap的find返回底层搜索树中序的第一个值为key的元素的迭代器,而map返回的是key元素的迭代器。并且由于multimap支持键值冗余,所以其成员函数没有[]运算符重载,因为一旦键值冗余,根本不知道该返回哪个键值的value。从返回结果中还可以看出:无论插入成功还是失败,都会返回指向key的迭代器,那么就意味着,insert不仅仅可以插入,还有查找功能。类似这样,把两个值传给pair,pair再自己构造一个匿名对象进行返回,所以可以省略参数类型。需要注意的是,有两个pair,一个是。

2024-09-24 16:14:55 855 5

原创 【C++】——多态

必须通过基类的指针或者引用才能调用虚函数,这是因为只有基类的指针或引用能够同时指向基类和派生类的对象,从而实现多态的效果。被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。1public:virtual void BuyTicket() // 虚函数cout << "全价票" << endl;public:virtual void BuyTicket() // 虚函数重写cout << "半价票" << endl;

2024-09-19 16:57:07 778 3

原创 【C++】——继承与虚继承

下⾯我们看到Person是基类,也称作⽗类。Student是派⽣类,也称作⼦类。(因为翻译的原因,所以既叫基类/派⽣类,也叫⽗类/⼦类)继承基类成员访问⽅式的变化基类的private成员只是不可访问,但是派生类还是得到了继承public和protected的区别public:protected:public:// 可以访问基类的public成员// 可以访问基类的protected成员Derived d;// 正确:可以通过Derived实例访问public成员。

2024-09-18 21:15:22 881

原创 【C++】——优先级队列和容器适配器

stack是一种后进先出的特殊线性数据结构,因此只要具有push_back()和pop_back()操作的线性结构,都可 以作为stack的底层容器,比如vector和list都可以。queue是先进先出的特殊线性数据结构,只要具有 push_back和pop_front操作的线性结构,都可以作为queue的底层容器比如:list。优先级队列是一种特殊的队列,他的元素出队列顺序并不按照先进先出原则,而是根据元素的优先级来。deque容器是什么,stack和queue为什么在底层设计时用deque来实现?

2024-09-17 17:59:41 782 3

原创 【C++】——list

在C++中,list是一个带头双向链表。

2024-09-16 22:02:21 776 4

原创 【C++】——二叉树搜索树

【代码】【C++】——二叉树搜索树。

2024-09-16 19:36:29 391 2

原创 【C++】——vector模拟实现和迭代器失效问题

插入元素:在vector末尾插入元素,除了指向最后一个元素的迭代器以外,其他迭代器依旧有效如果在其他位置插入,则指向该插入位置的迭代器和其之后的所有迭代器失效删除元素:删除元素后,被删除和删除之后的所有迭代器都会失效重新分配:当vector的大小超过当前容量时,它可能分配需要更大的空间进行存储元素,这种重新分配会导致所有迭代器、指针、引用失效注意:vector的迭代器失效也和编译器环境有关,有关指报错和运行。

2024-09-13 18:26:05 504 3

原创 【C++】——vector

vector是一个动态数组,可以根据需求变大变小vector支持随机访问vector会自动管理内存分配和释放vector在尾部添加和删除的效率非常高,中间和头部插入较慢,因为内存是连续的,除了尾部的增删以外都需要挪动被处理数据之后的全部数据。

2024-09-12 19:23:02 477 4

原创 【C++】——string(模拟实现)

这篇博客中构造、拷贝构造、析构、还有一些短小频繁调用的函数就不用做函数和定义分离,因为在类中,这种函数会默认是内联函数。

2024-09-11 16:01:30 692 4

原创 【C++】——初识模版

/为每一个类型都编写一个重载版本这种方法的缺点是显而易见的:随着需要交换的类型的增加,你需要不断地编写新的重载函数。这不仅繁琐,而且不灵活,因为它不能自动适应未来可能出现的新类型。函数模板提供了一种更加灵活和通用的解决方案。你可以定义一个模板函数,该函数可以接受任意类型的参数,并在编译时根据传入的参数类型生成相应的函数版本。

2024-07-23 16:00:47 747 15

原创 【C++】——new和delete

new会自动调用构造函数delete会自动调用析构函数new和delete不同的是:new/delete申请和释放的是单个元素空间,new[]和delete[]申请的是连续空间,而且new在申请空间失败时会抛异常,malloc则是返回NULLfree和malloc不会调用析构函数和构造函数,所以new和delete主要使用在自定义类型。

2024-07-21 21:17:02 782 10

原创 【C++】——类的对象(下)

因为那些你不在初始化列表初始化的成员也会走初始化列表,如果这个成员在声明位置给了缺省值,初始化列表会用这个缺省值初始化。如果你没有给缺省值,对于没有显示在初始化列表初始化的内置类型成员是否初始化取决于编译器,C++并没有规定。对于没有显示在初始化列表初始化的自定义类型成员会调用这个成员类型的默认构造函数,如果没有默认构造会编译错误。每个成员变量在初始化列表中只能出现一次,语法理解上初始化列表可以认为是每个成员变量定义初始化的地方。,跟成员在初始化列表出现的的先后顺序无关。希望这篇博客能帮助到你!

2024-07-19 16:11:37 750 15

原创 【C++】——类和对象(中)

3.没有显式实现时,编译器会自动生成一个默认赋值运算符重载,默认赋值运算符重载行为跟默认拷贝构造函数类似,对内置类型成员变量会完成值拷贝/浅拷贝(一个字节一个字节的拷贝),对自定义类型 damen成员变量会调用他的拷贝构造。赋值运算符重载是一个默认成员函数,用于完成两个已经存在的对象直接的拷贝赋值,这里要注意跟拷贝构造区分,拷贝构造用于一个对象拷贝初始化给另一个要创建的对象。通过使用引用,特别是常量引用,我们避免了这种递归调用,因为引用只是对象的别名,不需要创建对象的副本。希望这篇博客对你有所帮助!

2024-07-15 22:18:19 990 8

原创 【C++】——类和对象(上)

类是一个用户定义的类型,它封装了数据(称为属性或成员变量)和操作这些数据的方法(称为成员函数或方法)。类可以看作是创建对象的蓝图或模板,它定义了对象的行为(能做什么)和状态(有什么)。C++中的类和C语言中的结构体struct是非常相似的,C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。比方说我创建栈(stack)和队列(list),在c语言中,他们的定义必须分开,否则编译器就无法判断他们同一功能的同名函数到底谁是谁的push,谁的top等等…

2024-07-15 16:22:10 884 5

原创 【C++】——入门基础

const引用是一种特殊的引用,它允许你引用一个对象但不允许通过这个引用来修改该对象的内容。函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。函数重载的主要目的是让同一个函数名能够根据不同的参数类型或数量执行不同的功能,这样既可以提高代码的可读性,又可以让函数调用更加灵活。权限可以缩小,不能放大。

2024-07-14 21:05:14 1123 8

原创 【数据结构】——链表经典OJ(leetcode)

如果反转前半部分,那么找中间值的条件就为fast->next && fast->next->next不为空,我选择反转后半部分,相对更容易理解。当fast和slow相遇后,我们将meet点设为新的起点,然后head点和meet点往后走,终究会相遇,相遇的点就是环的入口。这题需要注意返回新链表的头节点,所以新链表创建两个节点来记录头和尾节点最方便。这题两个选择,反转前半部分再对比,或者反转后半部分再对比。先看代码,这题的代码很简单,但是要明白所以然。先记录链表长度,再找到要删除节点的上一个节点。

2024-06-26 16:12:49 707 4

原创 贪吃蛇——c语言版

前面提到如何定位光标位置,在每一页打印完以后暂停,并且清理该页,才会接着打印下一页printf("欢迎来到贪食蛇小游戏");printf("用↑ . ↓ . ← . → 分别控制蛇的移动,F1为加速,");printf("F2为减速,加速将得到更高的分数");

2024-06-20 19:55:55 991 9

原创 c语言——扫雷游戏(简易版)

什么是扫雷游戏?游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。这个游戏对于c语言的初学者来说难度还是挺大的,那我就实现一个初学者也能快速学会的初级版扫雷游戏。

2024-06-16 20:32:04 814 5

原创 【数据结构】——常见排序

在开始之前先准备一个交换数据的函数,排序会经常用到。

2024-06-15 18:09:47 985 4

原创 【数据结构】——二叉树的创建

2.遇到第一个空节点就开始判断,如果后面全是空,那就是完全二叉树,如果后面还有非空,就不是完全二叉树。再层序遍历之前,我们先把队列的val设置为树节点的指针。希望这篇博客对你有所帮助!1.层序遍历走,空也进队列。

2024-06-03 15:53:46 414 6

原创 【数据结构】二叉树和堆

二叉树,作为一种重要的数据结构,由节点组成,每个节点可以有两个子节点,通常称为左子节点和右子节点。二叉树是有序的,树中包含的各个节点的度不能超过2,即只能是0、1或者2。特殊二叉树满二叉树一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是 2的k次方-1,则它就是满二叉树。完全二叉树完全二叉树,作为一种效率很高的数据结构,是由满二叉树衍生出来的。

2024-05-26 17:47:17 966 10

原创 数据结构——时间复杂度和空间复杂度

我们先要知道什么是算法算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。如何衡量一个算法的好坏呢,一般是从时间和空间两个维度来衡量,即时间复杂度和空间复杂度。通俗一点的说,我的代码实现这个功能使用的时间是30毫秒,占用内存20M别人是1秒,占用内存40M时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。

2024-05-17 21:24:55 818 5

原创 C语言——栈和队列

ps->a我们有两种初始化方法,一种是直接malloc一个空间,可以是四个或者八个对象的空间,也可以像我一样,先不开,等会入栈的时候再开。栈是一种特殊的线性表,限定仅在表尾进行插入和删除的线性表。在进行入栈以前,先把top指向为栈顶的下一个数据,如果指向栈顶数据的话,初始化就不能为0。队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。栈的实现一般使用数组或者链表,因为cpu高速缓存的原因,使用数组也非常ok。希望这篇博客对你有所帮助!头文件:Queue.h。

2024-05-14 09:14:26 505 6

原创 C语言——环形链表详解

在一个单链表中,链表中存在环形结构。在链表中的某个节点,可以连续通过next指针再次到达,则链表中存在环。无论slow走几步,fast走几步,追击问题关系的不是走几步,而是速度差,因为他们最终都会进环。我们回到原来的问题,fast和slow到底会不会错过。当fast走三步,slow走一步时为例:如果同时存在N是奇数且C是偶数,那么将永远追不上。但是,有没有一个可能,这种情况不存在。我们使用数学来证明一下。假设slow进环时fast跟slow的距离为Nslow走的距离为L。

2024-05-12 23:23:13 902 7

原创 c语言——结构体详解

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。

2024-03-29 20:59:44 728 3

原创 c语言——整数和浮点数在内存中的存储(图解)

整数的二进制表达方式有三种:原码、反码、补码。有符号整数的三种表示方法均有符号位和数值位两部分,2进制序列中,最高位的1位是被当做符号位,剩余的都是数值位。符号位都是⽤0表示“正”,⽤1表示“负”。原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。补码:反码+1就得到补码 反码得到原码也是可以使用:取反,+1的操作。前⾯说过, 1≤M<2 ,也就是说,M可以写成 1.xxxxxx 的形式,其中 xxxxxx 表示小数部分。

2024-03-27 20:17:43 1228 3

原创 c语言字符串函数和内存函数(图文详解)

在编程的过程中,我们经常要处理字符和字符串,为了⽅便操作字符和字符串,C语⾔标准库中提供了⼀系列库函数,在介绍字符串函数之前,我先来给这些个字符串函数分一下类:功能:获取的字符串长度,不包括’\0’。返回字符串的长度。实例:模拟实现:二、 长度不受限的字符串函数:1.strcpy功能:将源指向的字符串复制到目标指向的数组中,包括’\0’,并返回目标数组起始地址。模拟实现:2. strcat功能:将源字符串的副本追加到目标字符串尾部。目标字符串中的’\0’被源字符串的第一个字符覆盖,并且在目标

2024-03-24 17:04:58 980 1

原创 c语言函数递归(图解)

递归是⼀种解决问题的⽅法,在C语⾔中,递归就是函数⾃⼰调⽤⾃⼰。我举个例子:上述就是一个简单的递归程序——main()函数中又调用了main()函数,重复调用。只不过上面的递归只是为了演示递归的基本形式,不是为了解决问题,代码最终也会陷入死递归,导致栈溢出(Stack overflow)

2024-03-14 15:20:06 1510 1

原创 c语言指针详解(图文)

1.数据是存放在内存空间中,每个内存空间都有像酒店房间一样的编号,只有知道了我的房间编号是什么,我才能刷卡进入。生活中我们把门牌号叫做地址,在计算机中,内存编号叫做地址,c语言中地址就叫做指针。2.指针的大小一般的计算机分为32位机和64位机,32位机的地址就由4个字节存储,62位机的地址就由8个字节的地址存储。

2024-03-09 20:20:55 1160

原创 C语言——水仙花数解法(图解)

如果大家还有不懂的地方,或者我哪里有错误,欢迎大家评论指出,我会尽我所能去解答的!因为调用了pow函数,所以头文件要加上#include

2024-01-31 17:26:44 552 1

原创 C语言——打印各种图案

欢迎大家来私信或者评论区讨论和作者一起学习,如果对你有帮助的话,请赏个大大的赞捏!

2024-01-07 20:24:53 1357 3

原创 函数完成数组的逆序输出(C语言)

这是一个基础题,代码看着有点长,其实原理很简单,如果这篇文章有哪里不正确的地方,请私信或者评论区向作者指出哦。若本篇内容对你有帮助的话,请多多支持作者,作者目前是一个C语言萌新,欢迎大家一起来交流!!!

2023-12-17 22:44:25 1658

原创 C语言——二分查找(图解)

​二分查找也称折半查找,是在一组有序(升序/降序)的数据中查找一个元素,它是一种效率较高的查找方法。​因为二分查找每次查找都可以剔除一半的查找范围,所以相比顺序查找每次一个一个元素查找,查找效率提高了很多。​二分查找最重要的两个点就是区间的赋值和循环条件。关于二分查找的讲解就到这里,如果哪里有问题,欢迎大家在评论区指出~~~

2023-12-10 23:18:45 1490 2

原创 关于gitee上传代码没有贡献度(小绿点)的问题

③查看email是否正确,否则修改email,最后记得保存(左上角File→Save)①右击需要上传的文件,→TortoiseGit→Settings。②找到Git→Edit global.gitconfig。③在邮箱设置里,将主邮箱更改④把箭头所指的设置取消。原因:本地邮箱和gitee邮箱不一致。①点击头像设置②更改登陆手机号码。如果方法一不行,还有第二个。如果出现这个方框就点击确定。

2023-12-06 23:12:40 609 8

空空如也

空空如也

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

TA关注的人

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