自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 红黑树(超详解)

上一篇文章我们讲了AVL树,但是AVL树只是一个过渡,我们实际当中用的更多另外一颗树还是红黑树.也不能说红黑树就是AVL树的改进,它是用另外一种方式来控制.这棵树更抽象一些,下一步我们来看一下.

2024-01-22 20:57:38 1255 32

原创 专题一_双指针(一)

因为我们越界的时候一定是cur==0导致的,所以我们就单独 处理一下这种情况就可以了。我们来看一下这么处理。把n-1这个位置修改成0,然后让dest向前移动两步,cur向前移动一步,然后正常复写就可以了总结一下:这种题算是半模拟题,半双指针算法题,一定要在草稿把它模拟这个过程,不要单单看别人的题解然后知道怎么写,就直接上手写了。

2024-01-03 22:32:31 4330 108

原创 AVL树(超详解)

AVL树是怎么来的呢?我们知道搜索二叉树会存在退化问题,退化以后就变成单支或者接近单支。它的效率就变成O(N)了,无法保证搜索效率。无法保证搜索效率我们就必须做一件事,我们得去控制平衡。我们直接定义成key/value结构,因为能实现key/value就能实现key,并且它们本质也差不多在这里我们第一次引入三叉链,也就是除了_left,_right还有parent,没有parent也可以,但是实现起来麻烦很多。

2023-12-29 13:28:30 2806 87

原创 map和set

map和set学了以后会非常舒服,我们今天重点讲它的使用。map有什么用?通过一个值就可以找另外一个值我们就可以用map,经典的场景就是字典,我们中文找英文,英文找中文。还有统计次数。map非常非常重要。学习map之前得先来认识一个结构。这个结构叫做pairmap是key和value的结构,它既要存一个value也要存一个key,它是key/value的搜索树。但它里面的数据不是存key和value,它是存value的变量。pair是库里面自己定义的结构。

2023-12-24 23:26:23 2256 57

原创 二叉树进阶题目(超详解)

二叉树进阶的题目不一定更复杂,但一定更适合用C++去写。这里的题目用C语言去做会非常恶心。

2023-12-24 02:22:50 1754 29

原创 搜索二叉树(超详解)

普通二叉树其实意义不大,如果用二叉树存储数据的话,还不如顺序表,链表这些。搜索二叉树它的意义就很大了。左边比根小,右边比根大,子树也满足这个特征。

2023-12-23 01:40:42 1589 17

原创 C++中多态的原理

上篇讲解了多态的原理,这篇文章来详细讲解一下多态的原理。这里有一道常考笔试题:sizeof(Base)是多少?为什么不是8?可以调试带大家看一下。仔细看,对象的头部多了一个指针。这个指针叫做虚函数表指针。上面不重要,重要的是下面的东西,多态的原理。这个指针指向的表里到底有什么东西呢?

2023-12-22 00:38:49 1548 27

原创 C++中的多态

多态非常非常重要,面试的时候经常出,这块一定要认真学。我们知道继承就是复用,那什么是多态呢?多态就是多种形态。具体点就是我们要做某个动作,当不同的对象去完成时会产生出不同的结果。只要是做同样的一件事,不同的人去做,结果不一样,那就可以称为多态。在程序当中就相当于调用一个函数,不同对象去调,它就会产生不同的结果。下面我们看一下,多态是怎么玩的。我们可以在虚函数的后面加上赋值0;那这个函数就叫做纯虚函数。包含纯虚函数的类就叫做抽象类。抽象类的特点是:不能实例化出对象。

2023-12-21 01:11:42 1709 18

原创 C++中的继承(二)

上一篇文章我们C++的正常继承其实已经讲完了,但是后面还有一个大坑。实际当中继承有单继承和多继承。单继承就是直接继承一个类。只有一个直接父类的就叫做单继承。如果是单继承那就比较简单。现实世界除了有单继承还有多继承。

2023-12-18 23:28:08 3586 83

原创 C++中的继承(一)

我们之前说过,继承是面向对象的三大特性。面向对象的三大特性:封装、继承、多态。封装在类和对象体现出。

2023-12-17 16:49:47 1444 29

原创 C++模板进阶

模板进阶也没有到一些特别的东西,就是讲比较偏的一些特性。在这里我们先来讲一下反向迭代器。

2023-12-15 19:05:50 1029 67

原创 双端队列和优先级队列

今天要介绍比较特殊的结构,双端队列。还有一个适配器,优先级队列。假设我们优先级数列存储的数据不再是内置类型。自定义类型,能不能用优先级队列。也可以。大堆:小堆:日期类需要重载大于,小于才行。如果没有重载就需要写仿函数才能搞定。给大家看一下更牛逼的东西。结果每次都不一样怎么回事呢?现在存进去的T是Date*,不是Date.Date* 可以进行比较,但这不是我想要的。Date* 是new出来的,new是堆上申请的空间,那个地址可能先大先小,完全没有规律。如果我非要这样比较呢?

2023-12-14 15:09:10 526 17

原创 C++STL的stack和queue(超详解)

栈和队列这一块其实有数据结构的基础,学起来非常简单。

2023-12-13 15:33:01 654 18

原创 C++STL的list模拟实现

要实现STL的list, 首先我们还得看一下list的源码。我们看到这么一个东西,我们知道C++兼容C,可以用struct来创建一个类。但是我们习惯用class。那什么时候会用struct呢?这个类所有成员都想开放出去,比如结点的指针,它一般开放出来。所以我们用struct.。继续看源码比较重要的东西,成员变量的结构。这个东西是啥?这样就很清晰了。知道它是一个结点的指针,下一步 应该看什么?成员看了,就看接口。

2023-12-13 10:07:36 1107 61

原创 C++STL的list(超详解)

看一下list, 在任意位置可以进行O(1)插入删除的操作。它怎么实现这个东西?它其实就是一个带头双向循环链表。#成员函数。

2023-12-12 10:41:26 566 27

原创 C++STL的vector模拟实现

public:private:我们之前实现顺序表是用指向数组的的指针和数组个数和容量来维护顺序表的,这里用三个指针来实现其实大差不差。

2023-12-12 00:25:27 314 13

原创 C++STL的vector(超详解)

vector就是数组,动态增长的顺序表。它和string的区别是什么呢?一个是管理任意类型的数组,一个是管理管理字符数组。为了提高内存申请和释放的效率,它的内存都不是直接从计算机来的,它是从内存池来的。学习vector的成本其实非常低,因为我们之前学习过string,并且vector其实就是一个顺序表。

2023-12-09 20:50:15 638 36

原创 C++STL的string模拟实现

今天要讲string的底层实现,通过自己来实现string,我们对string的理解才能更加的深刻。我们对string其实既熟悉又陌生,熟悉sting其实就是字符串,陌生是在于管理字符串这样一个类。

2023-12-08 20:18:22 620 64

原创 C++STL的string(超详解)

无论c++还是c语言,字符串都是最常见的类之一。我们日常当中写的程序必然要存储数据。我们的内置类型只能表示基础的信息,无法表示一些复杂的信息,比如int, double.但我们要表示身份证、住址那就表示不了了。

2023-12-07 18:45:20 602 44

原创 C++模板初阶

上面交换的代码可以写成这样。

2023-12-06 16:02:22 473 17

原创 C&C++内存管理方式

1.全局变量,static修饰的全局变量和局部变量都存放在静态区2.局部变量, 数组存放在栈区pChar3指向代码段C++增加了new和delete操作符它最主要的目的是为了处理自定义类型。return 0;注意:在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与free不会。

2023-12-05 23:31:23 371 12

原创 类和对象(下)

这句话很绕,慢慢往下看。

2023-12-04 23:49:19 174 10

原创 类和对象(中)

类和对象这块还是很重要的,不然后面会很麻烦。以前写栈的时候,我们是这样写的,经常忘记初始化,或者Destroy;而且Destroy可能在很多地方都要调用,写起来还很烦。init完成初始化,destory完成资源清理,如果不清理会造成内存泄漏。c++对此做了一些优化,下面带大家看一下具体是怎样优化的。return 0;1、我们不写,编译器会自动生成,我们写了,编译器就不会自动生成。默认生成构造和析构:a、内置类型不做处理。

2023-11-26 19:20:27 542 55

原创 类和对象(前)

类和对象,这是学习c++非常重要的一个章节。在学习的时候,前篇还算游刃有余,中篇最难,下篇轻舟已过万重山。用c++简单写一个栈,主要是为了看类和结构体的区别,具体怎么实现不重要。struct Stack//结构体的定义,在C++中更喜欢用class来代替。// 成员函数void Init(int n = 4)//设定缺省参数perror("malloc申请空间失败\n");return;size = 0;//...// 成员变量int* a;int size;

2023-11-20 19:35:23 399 55

原创 栈和队列详解

/栈顶int top;}Stack;跟顺序表一样首先单链表需要定义一个结点}QNode;因为我们要记录尾方便尾插,在加上我们本来就要有单链表头节点的指针来维护,为了方便 ,我们就再定义一个结构体。//记录有效数据的个数,后面如果要求,直接返回int size;}Queue;有个有意思的问题,能不能把链表的尾指针也放到定义结点中?这个问题大家可以想一下。

2023-10-21 23:22:22 1789 83

原创 带头双向循环链表详解

前面讲解了不带头单向非循环链表,今天介绍另一种结构,带头循环双向链表。与之前的单链表对比,这是一种近乎完美的结构,从后面的对比可以看出,关于单向链表的讲解大家如果有兴趣可以看看这篇文章。单向链表详解}LTNode;细数一下与单链表相比有哪些优势?1. 找尾结点不用遍历一次链表。2. 不用考虑要不要改变头结点的指针进行分类,因为有哨兵卫的作用,完全不用改变头节点的指针。3. 知道其中一个结点的指针时,不用遍历一次链表可以直接拿找到前一个结点。

2023-10-19 22:01:16 204 37

原创 单向链表详解

链表是一种常见而重要的基础数据结构,它弥补了顺序表遇到的一些问题。我们知道顺序表是一块连续的物理空间,它会导致一下三个问题。中间/头部的插入或删除数据,时间复杂度为o(N)增容的时候如果后面的那块空间被占用了或者后面的空间不够,需要重新申请一块新空间,需要拷贝数据,释放旧空间,会有不小的消耗。增容很不灵活。如果增容的空间大,需要重复申请会造成浪费。或者如果需要的空间小,又会造成一定空间的浪费。一小块一小块申请空间。

2023-10-12 16:43:52 242 42

原创 C语言-结构体详解

int age;s1和s2都是定义的结构体变量,这两个的区别就是s1是全局变量,s2是局部变量。. 操作符可以访问结构的成员变量,如果不按顺序初始化可以用.操作符。

2023-10-01 22:13:46 340 30

空空如也

空空如也

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

TA关注的人

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