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

原创 数据结构---顺序表

动态顺序表的定义我们用到的是动态开辟的数组。跟静态的顺序表同理,需要size变量来标记有效的元素个数,与之不同的是,我们还需要capacity变量来标记空间容量,以便空间不够时候的扩容。//定义int size;}SL;初始化:SLInit顺序表的初始化很简单,只需要将arr的值初始化为NULL,size和capacity的值初始化为0即可。

2025-11-17 09:38:01 665

原创 数据结构---时空复杂度

数据结构就是组织数据以及存储数据的一种方式,不同的数据结构在不同的场景之下会有不同的作用。而算法就是将输入的数据经过一系列的计算步骤,最后输出我们想要的结果。题干给了我们一个数组,要轮转k次,显然需要用到循环,那我们只需要先考虑轮转一次的方法,剩下k次只需要利用循环就可以了。因此就产生了我们的暴力解法,以题干示例数组为例。

2025-11-09 18:30:01 966

原创 C++___类和对象(下)

我们知道构造函数是用来做初始化工作的,对于初学者来说,一般就会在构造函数的函数体内初始化成员变量,而初始化列表其实是提供了一种新的初始化思路。先看一下初始化列表长什么样吧初始化列表以冒号为开始,逗号分隔,每个成员变量后边括号里边可以是表达式,也可以是值,用于给成员变量初始化。1.初始化列表里边成员变量的顺序没有规定,但是编译的时候会以类里边定义的顺序(也就是上边示例里边private里边声明的顺序)去依次初始化。

2025-10-27 14:47:42 966

原创 C++___类和对象(上)

类与C语言的结构体相似,但是功能更加强大也更加的复杂。我们用class关键字去定义类。class 类名成员函数成员变量。

2025-10-07 06:26:00 728

原创 基础算法---【双指针】

双指针算法有时候也叫或者,是⼀种优化暴⼒枚举策略的⼿段:当我们发现在两层 for 循环的暴⼒枚举过程中,两个指针是可以的,此时我们就可以利⽤两个指针不回退的性质来优化时间复杂度。因为双指针算法中,两个指针是朝着同⼀个⽅向移动的,因此也叫做同向双指针。⼀定要学会如何从暴⼒解法优化成双指针算法。

2025-09-30 22:50:20 656

原创 基础算法---【差分】

假设我们在f数组[x1,y1]坐标位置处+k,就会导致以[x1,y1]为左上角的所有元素的前缀和都+k(即蓝色框出的部分)对于红色方框内的部分来说,前缀和+k的结果正是我们想要的,但是对于在蓝色方框内但不在红色方框内的部分,我们不需要它们+k,因此,需要对[x1,y2+1]和[x2+1,y1]这两个坐标内的元素执行-k操作,这样就可以让以它们为左上角的矩阵里边的所有元素不发生改变(即黄色框出部分),但是阴影部分的元素很显然在计算前缀和的时候多减了一个k,所以我们还需要在[x2+1,y2+1]的地方+k。

2025-09-24 19:00:37 1005

原创 基础算法---【前缀和】

前缀和的核⼼思想是预处理,可以在暴⼒枚举的过程中,快速给出查询的结果,从⽽优化时间复杂度。是经典的⽤空间替换时间的做法。题目一:【模板】前缀和。

2025-09-22 18:16:15 958

原创 基础算法---【高精度算法】

高精度算法解决的就是数值特别大的数据之间的加减乘除的问题。基本思想就是先用字符串存入数据,然后再将这串数字逆序存放在数组里边。利用数组来模拟计算。为什么要逆序存在数组里边?原因就是我们小学时候的那种列竖式计算加减乘除的时候是先从个位开始计算的,而我们便利数组是从头开始便利的,所以逆序存放对于我们的计算更加的方便。

2025-09-13 12:02:37 1049

原创 基础算法---【模拟】

模拟题目就是根据题目的描述来解题,考验的是代码能力,几乎所有的模拟题都是需要分类讨论的。

2025-09-11 11:24:43 252

原创 数据结构---选择排序

选择排序,就是从一组数据当中找到最小(最大)的数据,放在数据的起始位置。我们需要两个变量begin和mini,begin最一开始为数组的0下标,mini负责去数据里边寻找最小的那个数,放到begin的位置。之后,begin++,再次重复刚才的过程,直到begin越界,至此,整个数组变成升序的了。

2025-09-03 14:56:14 1038

原创 C语言---预处理详解

C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理的。下边是它们对应的作用,预处理的时候就会像#define定义的字符一样直接被替换。__FILE__ //进⾏编译的源⽂件__LINE__ //⽂件当前的⾏号__DATE__ //⽂件被编译的⽇期__TIME__ //⽂件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义#define name 值。

2025-08-29 09:32:50 852

原创 排序---插入排序

对于插入排序而言,它的基本思想就是往已经排好序的序列里边插入数据。思想类似于玩扑克牌。接下来的排序都是基于下边的这个数组。

2025-08-22 20:11:14 1074 1

原创 C语言---编译和链接

当我们要实现任何一个支持C语言的程序的时候,都需要依赖两种环境,就是翻译环境和运行环境,翻译环境是负责将一个 .c 文件经过一定的步骤变成 .exe 文件,里边是二进制指令/机器指令。接着 .exe 文件会经过运行环境得到运行结果。

2025-08-19 20:33:01 814

原创 C语言---文件操作

文件指针就是一个指向文件类型的指针,其实每当我们在使用文件的时候,每个被使用的文件都会在内存中开辟一块属于自己的文件信息区,每个文件信息区都是用来存放文件的相关信息的。再强调一个点,就是本篇博客的所有输入输出都是以程序的角度输出,如果是标准输入输出流,输入就指的从键盘输入到程序里边,输出就指的从程序到屏幕,而文件流的输入输出,输入就是文件到程序,输出就是程序到文件。左边的abcdef就是文件test.txt里边的内容,而右边红色框出的fseek的三种写法都是对的,最终的运行结果都是打印ad。

2025-08-05 19:19:03 617

原创 C语言---函数的递归与迭代

我们如果想要直接获取到1,然后打印,这是非常困难的,但是,获取到最后一位的4很容易,只需要 1234 % 10 就可以了,又由于我现在想要顺序打印,所以4是要最后打印的,那就可以先打印前边的123,再打印4,而打印123,又可以拆分为先打印12,再打印3.............就是一个递归。根据斐波那契数列的规律,c可以通过a + b来实现,然后再把a的值改为b原来的值,b的值改为c的值,而现在的c就又可以由a+b来计算了,以此迭代下去,效果如下。它们俩是相辅相成的,不过迭代相对来说消耗的栈空间较少。

2025-08-02 20:08:30 912

原创 C++___引用

引用就是给已经存在的变量起一个别名,它和它引用的那个变量共用同一块内存空间。就比如像水浒传里边的李逵,又名“黑旋风”。引用的定义:类型& 引用别名 = 引用对象;由上图,b就是a的一个别名,如果不加引用的操作符,那么就变成了赋值。

2025-08-01 15:29:00 1132 1

原创 C语言---番外篇(柔性数组)

由于这块内容所谓综合性比较高,有数组的知识,有结构体的知识,还有动态内存管理的知识,所以我就单独写一篇博客,此谓番外篇。

2025-07-22 21:44:08 357

原创 C语言---数组基本内容(一维、二维数组)

数组可以把他想象成一个容器,里边存放的是相同类型的数据。 数组在创建的时候,我们给他一些初始值,这就叫数组的初始化。 注意:下边的所有操作都集合在最后的一个代码里边,我先把概念说清楚。 数组里边的每一个元素都是有下标的,下标从0开始,我们通过这个下标就可以去找到任何一个在数组里边的元素。 就如上边这个例子,假设数组的名字是arr,那么arr[2],就表示3这个元素,[],叫下标引用操作符,里边的数字就代表的是数组里边元素的下标。 我们已经

2025-07-20 08:49:17 832

原创 C语言---动态内存管理

我们在学习动态内存管理之前,一直都是通过开辟变量,或者是开辟数组的方式来在内存的栈区开辟空间的,但是这样的开辟方式有局限性,因为一旦开辟之后,它们的大小就无法改变,就缺少了很多的灵活性,但是动态内存管理就可以帮助我们解决这个问题,它是在堆区开辟空间的,并且它所开辟的空间是可大可小的。

2025-07-17 20:53:56 935 1

原创 C语言---自定义类型(下)(枚举和联合类型)

联合体在语法的定义上跟结构体没有什么区别,主要的区别就是联合体的所有成员共用的是同一块内存空间,并且编译器会为联合体里边最大的一个成员分配足够的空间,所以联合体也叫。下边来看一个定义联合体的例子。由上边的代码,我们不仅知道了联合体是如何定义的,可以发现联合体的大小确实是与结构体的内存对齐是不一样的。

2025-07-15 21:52:28 701

原创 C语言---自定义类型(上)(结构体类型)

结构体其实和数组一样,都是一些值的集合,只不过数组是一系类相同类型的值,而结构体里边的成员可以是不同的数据类型。关于它的声明,所用到的关键字是struct。struct 结构体名成员变量列表;}变量名;我先举个例子,就比如一个学生有名字、年龄、成绩等信息。那么此时就可以用结构体来描述它。struct Stu//名字int age;在刚才创建完成了结构体之后,我们就可以创建结构体的变量了。一共有三种方式:下面以代码加注释的方式给出。struct Stu//名字int age;

2025-07-13 22:13:03 730 1

原创 C语言---数据在内存中的存储

有了上边一篇的预备知识,我们可以继续往下学习了。

2025-06-18 18:02:42 867 1

原创 C语言---最全二进制与进制转化大总结(数据在内存中的存储前传)

本篇将围绕二进制的相关知识进行展开学习数据在内存中的存储。(前传)

2025-05-29 12:14:21 552

原创 C语言---内存函数

memcpy的功能和strcpy类似,都是用来拷贝数据的。与strcpy不同的是,memcpy的适用性更广并且是以字节为单位来拷贝的。memcpy函数的作用就是拷贝从source这个地址开始向后num个字节的数据destinction里边去。返回的是的destinction的首地址。

2025-05-21 20:43:43 1592 1

原创 C语言---常见的字符串函数(下)

本篇博客接着上篇的内容,如果上篇没看,可以跳转链接。

2025-05-15 12:57:24 931

原创 C语言---常见的字符串函数(上)

字符串函数是日常开发,竞赛,学习过程中不可避免的一环,这些库函数可以帮助我们实现很多问题,接下来,我给大家介绍几种常见的字符串函数。以下所有的这些函数都要包含一个共同的头文,<string.h>

2025-05-09 12:56:27 1039

原创 回调函数(qsort函数的使用以及模拟实现)

回调函数就是当我们把一个函数的指针当作参数传递给一个函数的时候,这个函数通过传递过来的函数指针来调用其所指向的函数的时候,这个被调用的函数就叫做回调函数。

2025-05-01 17:53:18 1018

原创 C语言---指针从入门到精通(下)

在学习数组的过程当中,相信大家都知道数组名就是数组第一个元素的地址,假设数组名为arr,那么也就是说 arr 和 &arr[0] 的值是相等的。一般情况下,数组名确实就是数组首元素的地址,但有两个例外。当数组名单独放在sizeof里边的时候,此时数组名代表的就是整个数组,sizeof(arr)也计算的是整个数组的大小。代码如下。arr数组里边是有5个int类型的元素,arr单独放在sizeof里边表示的是整个数组,所以此时所计算出来的是整个数组的大小,就是 5 * 4 == 20,单位字节。

2025-04-23 16:51:26 1098

原创 C语言---指针从入门到精通(上)

指针是C语言里边很重要的一块内容,是C语言的核心,其难度自然也很显然,本篇博文分为上下两部分,带大家从入门到精通,准备好了吗?启动!

2025-04-16 16:31:50 1163 1

原创 用C语言函数递归实现青蛙跳台阶和汉诺塔问题

一只青蛙要跳n个台阶,一次性它可以跳两个,也可以跳一个,问最终能跳几次。

2025-04-09 16:58:38 527

原创 二分查找(折半查找)

二分查找是一种基本的在数组里边查找元素的操作,相比较于直接的便利查找,二分查找的效率更高。

2025-04-01 18:34:33 401

原创 堆排序及其算法原理

相比于前边几篇文章所提到的排序算法,堆排序相对要复杂一点,但它的时间复杂度小,排序更快。(延续前边那篇文章,还是实现的升序排序)

2025-03-17 21:52:40 314

原创 快速入门后缀表达式(逆波兰表达式)

这题我用到的是数据结构中的栈来模拟实现整个过程,根据题目的描述,其实我们只需要将所有的数字依次进栈,每当遇到算数运算符就从栈里边弹出两个元素,计算出的结果再次存入栈当中,最后遇到结束标志的时侯,就可以将最终的结果打印在屏幕上边了。假如现在给了我们这一个式子 3 * 10 + 1,我们想把它变成后缀表达式,其实就是先将 * 号移动到式子的最后,变成 3,10,*,最后还要加个1,那么这个式子最后变成的后缀表达式就是。根据我个人的理解,后缀表达式就是将原本的一串表达式做了一个顺序上的变化而已。

2025-03-08 19:09:20 351 1

原创 位运算运用---按位与获取二进制指定位

通过这道题应该可以很好的帮助大家理解按位与运算的一些东西了。

2025-03-01 17:19:31 503

原创 关于斐波那契数列的三种解法

以下的解法都已经在OJ平台上提交过没有问题,大家放心“食用”。

2025-02-24 16:08:25 443

原创 一站式教懂冒泡排序!

希望能对大家有帮助,有什么问题可以直接留言或者私信我。

2025-02-22 20:01:49 859

原创 #vs!scanf函数不能使用的原因以及解决办法。

从图片里边不难看出,我定义了一个字符数组并且用scanf函数输入了erzong,当我运行的时候,确实在屏幕上也打印出来了,但vs会出现一个error。因为我命名定义的长度为5的字符数组,但我输入的时候是6个字符,却也正常打印出来了,这就所谓scanf函数不安全的地方。使用scanf函数的时候常常也会出现警告,说是返回值被忽略,因为scanf函数是有返回值的,返回值代表的是scanf成功读取到的数据的个数,如果发生读取错误或者到达文件末尾就会返回EOF,什么都没有读到就会返回0.可能会出现这个警告。

2025-01-30 12:07:23 724

原创 C语言:static修饰变量和函数的不同点与相似点

1.首先我们需要知道局部变量和全局变量的概念,顾名思义,局部变量就是只能局部使用,它位于内存的栈区。而全局变量位于内存的静态区,可以给整个工程来使用。也可以理解为全局变量与main函数共存。2.由上边的代码也可以清楚的知道,局部变量只能在它所处的大括号里边起作用,而全局变量没有大括号的限制,整个工程都可以用。

2025-01-27 11:39:02 432

原创 C语言:一睹为快——指针入门学习内容!

前言:指针可能是让很多小伙伴头疼的一件事,我其实也不例外,所以我就更想写出一系列的博文来理清我自己学习的思路,同样的,我希望通过我自己的梳理,能帮助到更多有需要的小伙伴!

2025-01-21 12:20:39 460 1

原创 OJ题目当中的一些让我哭笑不得但确实一直混淆的概念!

上边这几张截图都是我从某牛,某谷等刷题网站上找来的截图,不知道有多少小伙伴跟我一样对这些概念混淆不清的。今天我终于鼓起勇气来逐一搞清了。因为本人语文功底可能不太行,下边我用伪代码的方式把我这些天整理的结果分享给大家,希望能给跟我一样有困惑的小伙伴提供一些帮助。不知道你会不会和我一样存在着一些疑惑。在我备赛蓝桥杯的过程当中,常常会遇见一些问法。

2025-01-19 09:23:14 162

空空如也

空空如也

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

TA关注的人

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