自定义博客皮肤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)
  • 收藏
  • 关注

原创 c++(AVL树及其实现)

AVL树是最先发明的自平衡⼆叉查找树,AVL是⼀颗空树,或者具备下列性质的⼆叉搜索树:它的左右子树都是AV树,且左右子树的高度差的绝对值不超过1。AVL树是⼀颗高度平衡搜索⼆叉树,通过控制高度差去控制平衡。AVL树得名于它的发明者G. M. Adelson-Velsky和E. M. Landis是两个前苏联的科学家,他们在1962年的论文《An algorithm for the organization of information》中发表了它。

2024-09-28 10:55:10 701 2

原创 c++:set和map

1、set的声明如下,T就是set底层关键字的类型2、set默认要求T支持小于比较,如果不支持或者想按自己的需求走可以自行实现仿函数传给第⼆个模版参数3、set底层存储数据的内存是从空间配置器申请的,如果需要可以自己实现内存池,传给第三个参数。⼀般情况下,我们都不需要传后两个模版参数。4、set底层是用红黑树实现,增删查效率是 ,迭代器遍历是走的搜索树的中序,所以是有序的。

2024-09-26 17:05:59 711

原创 c++二叉搜索树

二叉搜索树又称二叉排序树,它或者是⼀棵空树,或者是具有以下性质的二叉树:• 若它的左子树不为空,则左子树上所有结点的值都小于等于根结点的值• 若它的右子树不为空,则右子树上所有结点的值都大于等于根结点的值• 它的左右子树也分别为⼆叉搜索树• 二叉搜索树中可以支持插⼊相等的值,也可以不支持插入相等的值,具体看使用场景定义,map/set/multimap/multiset系列容器底层就是⼆叉搜索树,其中map/set不支持插入相等值,multimap/multiset支持插⼊相等值。

2024-09-16 10:58:07 955

原创 c++多态

多态(polymorphism)的概念:通俗来说,就是多种形态。多态分为编译时多态(静态多态)和运行时多态(动态多态),这里我们重点讲运行时多态,编译时多态(静态多态)和运行时多态(动态多态)。编译时多态(静态多态)主要就是函数重载和函数模板,他们传不同类型的参数就可以调用不同的函数,通过参数不同达到多种形态,之所以叫编译时多态,是因为他们实参传给形参的参数匹配是在编译时完成的,我们把编译时⼀般归为静态,运行时归为动态。

2024-09-13 17:23:25 1208

原创 c++(继承、模板进阶)

下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。(因为翻译的原因,所以既叫父类/子类,也叫父类/子类)

2024-09-10 15:36:01 989

原创 初识c++(stack,queue)

deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比较高。deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个双端队列底层是一段假象的连续空间,实际是分段连续的,为了维护其“整体连续”以及随机访问。

2024-08-09 16:07:34 781 1

原创 初识c++——list

由于list的储存空间不是连续的,所以我们要单独实现++/–等操作,所以我们直接放在一个类中去实现它(但是我们还是用节点指针去实现它,所以成员函数还是节点指针),这里以const_iterator为例子。这里唯一要注意不能删除哨兵位的节点,这样会导致无法访问该list(begin,end都和l哨兵位有关),所以erase不能删除end的节点(end指向的就是哨兵位节点)我们在平时可将迭代器暂时理解成类似于指针,

2024-07-30 21:52:05 477 3

原创 初识c++——vector

reserve只负责开辟空间,如果确定知道需要用多少空间,reserve可以缓解vector增容的代价缺陷问题。resize在开空间的同时还会进行初始化,影响size。

2024-07-27 23:32:27 2205 5

原创 初识c++(string和模拟实现string)

​。

2024-07-23 23:59:43 876 9

原创 初识c++(模板,STL)

class 类模板名// 类内成员定义// 类模版public:_size = 0;// 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误// 扩容++_size;STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

2024-07-19 22:01:45 896 3

原创 初识c++(内存管理)

int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;new的原理调用operator new函数申请空间。

2024-07-19 21:12:12 1047 2

原创 初识c++(类与对象下:初始化队列。类型转换,static成员,有元,内部类,匿名对象)

• 引用成员变量,

2024-07-15 21:43:38 981 1

原创 初识c++(类与对象下:构造函数,析构函数,拷贝构造函数,赋值运算符重载)

默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。自动调用:⼀个类,我们不写的情况下编译器会默认生成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最后两个取地址重载不重要,我们稍微了解⼀下即可。默认成员函数很重要,也比较较复杂,我们要从两个方面去学习:• 第⼀:我们不写时,编译器默认生成的函数行为是什么,是否满足我们的需求。• 第⼆:编译器默认生成的函数不满足我们的需求,我们需要自己实现,那么如何自己实现?构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫

2024-07-12 16:40:31 909 3

原创 初识c++(类与对象——上)

• class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。• 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前面或者后面加_ 或者 m开头,注意C++中这个并不是强制的,只是⼀些惯例。• C++中struct也可以定义类,C++兼容C中struct的用法,同时struct升级成了类,明显的变化是struct中可以定义函数,一般情况下我们还是推荐用class定义类。• 定义在类面的成员函数默认为inline。

2024-07-11 20:20:56 1001

原创 初识c++(引用,inline,nullprt)

引用不是新定义⼀个变量,而是给已存在变量取了⼀个别名,它和它引用的变量共用同⼀块内存空间。

2024-07-09 20:55:06 1064 4

原创 初识c++(命名空间,缺省参数,函数重载)

1、定义命名空间,需要使用法到namespace关键字,后面跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。(注意{}后不跟“;”)。2、namespace本质是定义出⼀个域,这个域跟全局域各自独立,不同的域可以定义同名变量,所以下面的rand不在冲突了。3、C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/

2024-07-08 19:18:48 1957 10

原创 平方根的三种求法(袖珍计算器算法,二分查找,牛顿迭代)

袖珍计算器方法主要运用到了我们高数上所学的关于e底数转化的思想,即。

2024-06-24 20:38:17 772 5

原创 排序算法——归并排序以及非递归实现

具体原因如下:但是如果改为区间为。

2024-06-03 21:11:59 687 12

原创 排序算法——快速排序(队列和栈实现非递归)

本博客以hoare版本为例。

2024-05-31 20:47:18 709 11

原创 排序算法——上

我们从左边开始把相邻的两个数两两做比较,当一个元素大于右侧与它相邻的元素时,交换它们之间位置;反之,它们之间的位置不发生变化。冒泡排序是一种稳定的排序算法。

2024-05-28 15:12:19 1117 11

原创 树的层序遍历,平衡二叉树,以及反转二叉树

层序遍历的实现:1.依赖于队列的数据结构2.核心怎么实现:1)创建一个队列的容器对象。2)判断根节点是否为空,不为空则添加根节点到队列中。3)遍历是一个循环性的工作,写一个死循环,死循环的第一步就是跳出死循环的条件:当队列中没有东西时退出(换句话说,没东西可遍历了)。4)每弹出一个元素,再访问(就是进行符合场景的操作),最后添加两边的左右子节点(如果不为空的话)。

2024-05-25 19:30:50 440 9

原创 二叉树的基本操作以及二叉树部分oj题

注意!给第一个if条件不能加k==1,因为可能会出现下面的情况当左子树还没有到k==1时直接跳出循环,如果加上可能会导致对空指针的引用。

2024-05-22 21:42:18 394 10

原创 Topk问题以及二叉树的三种层序遍历和基本操作

1、问题描述TOP-K问题:即求数据结合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大。比如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。2、思路对于Top-K问题,能想到的最简单直接的方式就是排序,但是:如果数据量非常大,排序就不太可取了(可能数据都不能一下子全部加载到内存中)。最佳的方式就是用堆来解决,基本思路如下:1.前k个最大的元素,则建小堆前k个最小的元素,则建大堆2.

2024-05-19 19:22:55 483 9

原创 堆以及堆排序的实现

的。

2024-05-17 22:38:09 916 9

原创 数组实现循环队列

循环队列最主要的特点为当前面的空间被pop后,后面的数据可以插入到前面空余的数据中去;

2024-05-12 17:52:26 339 10

原创 栈实现队列

栈的特点是先出再入,而队列的特点为先入先出,

2024-05-11 19:14:12 534 9

原创 队列的实现以及队列如何实现栈

因为队列对头节点和尾节点使用多,所以我们用一个结构体封装出其头节点和尾节点的地址,会更加方便我们后续的操作:三、.c文件的实现1、初始化2、销毁注意这个与链表的销毁很想,不能简单的只释放Queue节点,而是要通过循环将每一块申请的空间都释放(充分体现了链表的物理结构不连续) 3、插入4、出列5、访问头数据6、访问尾数据7、判断是否为空和获取数据个数四、用队列实现栈我们知道栈是先出后进,而队列是先进先出;为了操作简单,我们在一

2024-05-11 17:18:11 614 6

原创 栈的实现以及c语言解决括号匹配问题

出栈其实非常简单只需要将top减1就可以了,但要注意top不能减到0,因为指向0的时候就没有元素了,数组大小为0;那么有没有可能出现错过的情况?这里我们就要认真审题。这题恰好用到了我们刚昂实现的栈的知识,

2024-05-07 21:11:37 615 13

原创 链表带环问题的方法证明

由上面可知道当fast==2slow的时候一定相遇,那么当fast!=2slow呢,一定会相遇吗?,有没有可能出现不相遇的情况?那么当fast==任意倍的slow时都是可以的,只不过证明起来比较麻烦,举一个4倍的例子。链表带环问题比较传统的思路是使用快慢指针,当快和慢指针相遇的时候那么说明此链表带环。上述办法求出环的入口,从入口开始走走到再次走到入口时走过的距离就是环长。理论上来说是存在追不上的情况的,对不对呢?那么这个是为什么,难道是偶然吗?所以我们可以很容易写出下面的代码。

2024-04-29 21:05:00 413 11

原创 单链表的实现

链表相对于顺序表来说更好实现,但比较难的是理解其是如何实现将各个节点连起来的。期待下一次我们一起van♂。

2024-04-12 18:38:15 745 6

原创 顺序表实现通讯录

通讯录是非常典型的顺序表使用示例,其最后的永久保存数据更是需要我们使用文件函数,代码总量也是非常大足足有400多行,需要大家好好消化。期待下一次和你们一起van♂。

2024-04-04 16:44:22 1094 12

原创 顺序表的实现

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。可动态增长的数组,要求数据是连续存储的。//类型重命名,后续要存储其它类型时方便更改//指向动态开辟的数组//有效数据个数//容量大小}SL;注意将数组定义为数组指针:如果定义为数组则属性表空间太大,造成空间浪费。顺序表是比数组更加灵活的存储方式,也是我们接触的第一个数据结构,熟练掌握是十分重要的。

2024-04-04 11:01:24 361 10

原创 编译与链接

编译和链接能够帮我们更好的理解c语言中程序执行前是如何运行的,今天由本哲学家带你深入理解c语言的编译和链接。

2024-03-30 12:57:33 745 5

原创 文件的操作

其中只有fread和fwrite适用于文件流,其他的适用于所有流只是将从键盘上读取数据改成了从文件里读取数据,将数据打印在屏幕上改成了打印在文件内。下面以fgetc和fputc为例子FILE *fp;int c;int n = 0;perror("打开文件时发生错误");return(-1);dobreak;}while(1);fclose(fp);return(0);假设我们有一个文本文件file.txt,它的内容如下。FILE *fp;int ch;

2024-03-29 18:52:49 1945 9

原创 结构体及结构体内存大小问题

结构体的使用其实对我们来说并不难,难的是如何计算其大小,需要我们熟练掌握其对齐原则。期待与你们一起van♂。

2024-03-22 20:55:04 897 13

原创 浮点数的存储。

浮点数在内存中的存储是相当复杂的,无数小哲♂学家被其折♂磨得痛不欲生,接下来就让本哲♂学家带你们深入了解浮点数在内存中的存储。

2024-03-16 21:40:02 970 10

原创 常见内存函数

在前面的博客里我们学习了一系列的字符串函数,但那些函数只能处理字符串,今天让本哲♂学家将带大家一起学习能够处理其他类型数据的函数——内存函数。这些函数拜托了以往我们所学字符串函数只能处理字符串的限制,让我们可以处理更多数据,是十分有用的工具。同时memmove的实现一定要好好思考,能进一步提高我们的编程能力。期待我们下一次一起van。

2024-03-15 20:34:50 822 6

原创 字符串函数

在编程的过程中,我们经常要处理字符和字符串,为了方便操作字符和字符串,C语言标准库中提供了⼀系列库函数,接下来我们就学习⼀下这些函数。以上只是我们经常要用到的字符串函数,实际上字符串函数还有很多,还需我们进一步学习。期待与你们的下一次一起van♂。

2024-03-12 14:51:08 799 10

原创 深入了解指针

指针是我们平时编程时非常方便和重要的东西,理解以及运用指针是我们学习c语言必修之课,接下来跟着本哲学家一起深入指针。以上只是指针知识中最基础的知识要真正学会指针还要经过大量的练习才能掌握,期待与你们的下次见♂面。

2024-03-06 22:05:55 1029 4

原创 大一非计科班期末c语言程序作业(提供源码!!!)

扫雷游戏是对于编程小白提高能力最好的一个项目,如果小白们想要进一步的提高,一定要尝试编写出扫雷游戏。

2023-12-12 21:25:54 1000 5

空空如也

空空如也

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

TA关注的人

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