自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【语法】C++的list

list的大部分用法和vector都很像,例如push_back,构造,析构,赋值重载这些就不再废话了,本篇主要讲的是和vector不同的点构造、拷贝构造:析构:赋值重载:尾插:vector就可以存储多个数据了,为什么还要有一个list呢?相信这是很多初学者的问题之一,下面就给大家说清楚vector缺点:vector优点:支持下标的随机访问,间接的就很好的支持排序、二分查找、堆算法等等通过上面可知,vector因为支持下标的随机访问(即空间是连续的),那么再增删查改就会牺牲效率为了解决这个痛点,就有了lis

2025-04-09 22:39:23 651

原创 力扣题目分享:只出现1次的数字I II III(位运算版)

这道题目是要找出只出现一次的数字,其他数字都会出现两次C语言可以直接用的位运算有按位与(&),按位或(|),按位异或(^)这道题用到的是按位异或先讲一下按位异或:对于两个二进制数,相同为0,不同为1,上图中前两位是不同的,所以只有前两位为1,后三位都为1,所以这两个数按位异或的结果就是00011,即3那两个相同的数按位异或的结果就是0而0和任何数异或都会是另一个数我们可以利用这个特性,来把所有的数都异或一遍,最后的结果就是单独的那个数了(相同的都变成0了,0和任何数异或都会是另一个数)

2025-03-25 16:53:49 294

原创 【语法】C++的vector

在C语言中,想要存储非连续的数据,通常会用数组(array),例如int arr[20],arr中就可以存储20个int类型数据,但arr这个数组它的上限就永远是20,不会动态增长。在C++中,STL中的vector容器就很好的弥补了这点,它是一个可以动态增长的顺序表容器,本篇文章会说明vector最常用的十几种接口函数。

2025-03-24 17:05:18 857

原创 我的创作纪念日

现在到了大学,在看鹏哥C语言的视频时,提到说把学习的知识通过博客记录下来可以加强记忆,再加上之前就经常会用到优快云来解决问题,我也想当那个可以帮助别人的人,就开始博客之旅了。到目前为止,我认为我写过的最好的代码就是这道题。

2025-03-18 16:40:33 421

原创 【语法】C++中string类中的两个问题及解答

贴主在学习string类时遇到过两个困扰我的问题,今天拿出来给大家分享一下我是如何解决的。

2025-03-02 22:54:05 294 2

原创 【语法】C++的string

在C语言中,要想存储一串字符,往往用的都是char arr[],也就是字符数组,而在C++中,引入了一个比字符数组更方便,可执行的操作也更丰富的类:string,可以把string归类到STL里面,但实际上string出现的要比STL早。本篇将介绍string类中常用的20几个接口。

2025-02-26 21:03:42 982

原创 【语法】C++的内存管理 & 模板

new和malloc的区别new会调用构造函数,失败抛异常,malloc失败了返回0malloc是一个函数,new是一个操作符malloc用法:参数传字节数,返回值是void*;new后面跟申请对象的类型,返回值是类型的指针malloc,operator new,new的关系mallocoperator new -> malloc + 失败抛异常new -> operator new + 构造函数。

2025-02-10 22:10:35 611

原创 牛客题目分享:JZ64 求1+2+3+...+n(用static成员和构造函数的方法)(C++)

题目看上去很简单,因为用循环、递归、等差数列就能了了几行解决这个问题,但就如题目所说的, 如果都这些方法都用不了呢?如果只限制题目所说的条件,其实是没有限制递归的,只不过递归所需要的判断条件的if else被禁了而已,我们可以用&&代替,但这并不是出题人的真正意图,本篇将用C++中的构造函数和static成员的特性来解决!

2025-02-01 13:36:54 474

原创 【语法】C++中类的默认成员函数

构造函数与类同名,无返回值构造函数可以被重载(因此有无参和有参两种)通常用全缺省构造函数代替有参和无参两种构造函数当类中没有自己定义时,编译器自动生成的无参默认构造函数,1.针对内置类型的成员变量没有做处理,2. 针对自定义类型的成员变量,调用它的构造函数默认构造函数只能有一个(全缺省构造和无参构造也算默认构造函数)构造函数是在类名前加上~,无参数无返回值析构函数不能重载,所以只能有一个,如果没有显式定义,编译器将会自动生成默认析构函数。

2025-01-30 15:19:26 1340

原创 【基础算法】计数排序(C语言)

cnt[0]的值是1,就代表0有1个,就先往原数组中写一个0,1有1个,就再往原数组中写一个1,以此类推,覆盖完成后就是排好序的数组了。再遍历原数组,比如上图数组,第一个数组是4,就往新开辟的数组中的cnt[4]++,接下来是5,就cnt[5]++,直到遍历结束。此时我们可以只开辟到4000的下标,那1000就要存到0的位置,因为1000是数组中的最小值,所以可以由它来充当0。排序分为比较排序和非比较排序,比较排序有希尔排序,快速排序,冒泡排序,插入排序,堆排序等等,而。,这里就讲解一下计数排序。

2025-01-21 13:47:46 232 1

原创 【基础算法】归并排序(C语言)

归并排序是利用分治法进行排序,简单来说是把两个有序数组拼合成一个有序数组(此文默认按升序)我们现在有两个有序数组,要怎么将它合并成一个呢?让begin1和begin2比较,较小的那个移动到创建的新数组中,可以看到现在begin1所指向的值更小,所以将1移到下面数组中,并将现在begin2更小,所以将2移到下面的数组中,并将接下来也一样,直到数据排完为止当其中的一个数组排完后,就可以将另一个数组中剩下的值都移到新数组中现在左边的数组已经排完了,就可以将右边数组的数据都移到新数组中。

2025-01-19 11:36:00 872 1

原创 【基础算法】快速排序(C语言)

快速排序的实现原理与二叉树的前序遍历相似分治递归所以建议读者先学完二叉树的遍历再来学快速排序会简单许多。先来将快速排序的单趟排序,它的核心思想是在数组中找一个基准值(key),比基准值小的就放在左边,比基准值大的就放在右边。基准值的取值一般是第一个或者最后一个(不过这种取值方式有缺陷,后面会介绍优化方法)快速排序的单趟排序有,接下来为大家一一讲解(此文默认为排升序)

2025-01-16 13:59:16 1055 2

原创 【基础算法】希尔排序(C语言)

希尔排序本身是直接插入排序的优化版,所以接下来先简单复习一下直接插入排序。

2025-01-07 11:36:16 883

原创 力扣题目分享:189. 轮转数组(C语言)

第一个想到的应该都是暴力解法,也就是每次都将数组除了最后一个元素都整体往后移一位,然后将刚才的最后一个元素放到第一个位置就拿题目的用例一来举例代码如下然而这个算法的时间复杂度是O(K*N),会导致超时。

2024-12-03 22:49:13 372 1

原创 【基础算法】堆排序与TopK问题(C语言)

堆(Heap)是一类特殊的数据结构,是最高效的优先级队列。堆通常是一个可以被看作一棵完全二叉树的数组对象。堆分大堆和小堆,大堆的每个父亲都比孩子要大,小堆的每个父亲都比孩子要小。建议大家了解二叉树后再来学习堆排序。

2024-11-26 22:30:43 1132 1

原创 【基础算法】二维差分(C语言)

在学习二维差分之前,我们先复习一下一维差分给定一个数组要对这个数组差分,也就是对这个数组的l到r个元素同时操作(加减),比如对这个数组的下标1到3的元素都进行+2操作但这种操作太过于繁琐,于是可以用到一维前缀和先创建一个比原数组大一个的标记数组在当前位置起始位置+2,并在末尾位置的下一个-2再把求出标记数组的前缀和,就变成了此时sumarr+arr的值就是差分后的结果了。

2024-11-20 22:10:07 1084 1

原创 【基础算法】二维前缀和(C语言)

在学习二维前缀和之前,我们先来复习一下一维前缀和:给定一个数组要求这个数组的前缀和,需要再创建一个数组sum[5]={0};当i=0时否则这样arr的前缀和数组sum就求出来了,如果现在想要知道arr[i]到arr[j]的和,就可以用公式。

2024-11-16 08:00:00 1389 3

原创 力扣题目分享:138. 随机链表的复制(C语言)

我们最容易想到的就是暴力解法,也就是先复制一份链表,再将每个节点的random指针指向的节点与自身节点的差值求出来,再一个个指向,如下:这样一直遍历,大概可以估算时间复杂度为O(N^2)

2024-11-12 23:00:25 374 1

原创 力扣题目分享:622.设计循环队列(C语言)

我们可以先定义一个front(头)和rear(尾)(从0开始的下标),每插入一个元素就把rear往后一位(rear指向的是已有元素的下一个位置,也就是下一次插入元素的位置),每删除一个元素就把front往前一位,但如果直接直接定义k个元素的数组,就会出现下面这种情况。这里复用了上面写的判断循环队列是否为满的函数,如果为满则无法插入,返回false,否则插入元素并返回真,首先和上一个函数一样,是一个复用,用来判断是否为空,如果不是空,就返回队尾元素。此时front删掉了最后一个元素,与rear相等,即为空。

2024-11-11 22:08:59 1168 1

原创 力扣题目分享:LCR 022. 环形链表 II(C语言)

想要知道环的入口点,就要知道:一个指针从相遇点开始走,一个指针从链表头开始走,它们会在环的入口点相遇。即追击问题

2024-11-10 21:34:59 431 3

手搓栈和队列的C语言实现项目

该项目是用C语言实现的栈和队列的代码,里面有包括入栈、出栈、入队、出队等等代码,可以让初学数据结构的同学更好的理解栈和队列

2025-01-16

结课项目动态通讯录的c语言实现

内容概要: 用了动态开辟+文件的方式实现了通讯录的增删查改 适合人群:0基础项目经验,熟练C语言是初学者 能学到什么: 项目经验,命名习惯,动态开辟、文件、结构体、枚举的运用

2024-11-21

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

TA关注的人

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