自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【数据结构初阶】二叉树(2)

现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。(2)使用向下调整,从倒数第一个非叶子节点开始,即最后一个节点的父亲,即[(size-1-1)/ 2 ]【找到这个父亲的节点,向下排序,然后这个父亲节点依次减一【就找到各个小堆,依次向下排序,就成为了一个堆。删除堆是删除堆顶的数据,将堆顶的数据根最后一个数据一换,然后删除数组最后一个数据,再进行向下调整算法。

2023-12-26 15:30:37 3944 67

原创 【C++初阶】类与对象(上)

/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。一般情况下,更期望采用第二种方式。// 我们看看这个函数,是不是很僵硬?

2023-12-15 17:16:53 2452 69

原创 【初阶C++】入门(超详解)

C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的,比如:作用域方面、IO方面、函数方面、指针方面、宏方面等。为后续类和对象学习打基础。定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。namespace green//命名空间的名字//定义变量//定义函数//定义类型int val;//嵌套命名空间。

2023-12-13 21:39:53 1973 57

原创 【初阶C++】前言

1. 什么是C++2. C++发展史3. C++的重要性4. 如何学习C++C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。

2023-12-12 21:58:38 1576 61

原创 【数据结构初阶】二叉树(1)

通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。1.某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( ):若一个节点含有子节点,则这个节点称为其子节点的父节点;:以某节点为根的子树中任一节点都称为该节点的子孙。:一个节点含有的子树的根节点称为该节点的子节点;:度为0的节点称为叶节点;:一个节点含有的子树的个数称为该节点的度;:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;

2023-11-26 18:51:56 2031 40

原创 【数据结构初阶】栈和队列

队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。通读全文的你肯定收获满满,让我们继续为数据结构学习共同奋进!栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有。FIFO(First In First Out) 入队列:进行插入操作的一端称为。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。

2023-11-22 19:43:35 1817 96

原创 【数据结构初阶】双链表

💘不知不觉,【数据结构初阶】双链表 以告一段落。通读全文的你肯定收获满满,让我们继续为数据结构学习共同奋进!

2023-11-20 22:05:41 1461 92

原创 【数据结构初阶】单链表(附全部码源)

这样写虽然把pos位置后面的节点从链表中剔除出去了,但并没有真正意义上的实现删除,因为每一个节点都是通过malloc在堆上申请的,不使用的时候要主动的去释放掉,也就是free掉,把这块空间归还给操作系统,否则会导致内存泄漏。需要注意的是空链表和只有一个节点的链表的情况,空链表无法进行尾删,而只有一个节点的链表在尾删后会变成一个空链表,这意味着要改变头指针里面存放的地址,所以尾删形参也要传递二级指针。先让newnode的指针域存储pos后一个节点的地址,再让pos的指针域存newnode的地址。

2023-11-17 16:33:10 1271 104

原创 【数据结构初阶】链表OJ

💘不知不觉,【数据结构初阶】链表OJ以告一段落。通读全文的你肯定收获满满,让我们继续为数据结构学习共同奋进!定义快慢指针,使快指针先走与慢指针同步。然后同时走看是否相交。题目解析:把原链表遍历一遍,插入新链表。

2023-11-15 17:24:15 1326 99

原创 【数据结构初阶】顺序表

💘不知不觉,【数据结构初阶】顺序表和链表(1)以告一段落。通读全文的你肯定收获满满,让我们继续为数据结构学习共同奋进!顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以。是n个具有相同特性的数据元素的有限序列。用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…动态顺序表:使用动态开辟的数组存储。

2023-10-25 09:36:58 1322 107

原创 【数据结构初阶】算法的时间复杂度和空间复杂度

一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。在计算机发展的早期,计算机的存储容量很小。实例5基本操作执行最好N次,最坏执行了(N*(N+1)/2次,通过推导大O阶方法+时间复杂度一般看最。空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。实例4基本操作执行最好1次,最坏N次,时间复杂度一般看最坏,时间复杂度为 O(N)实例1基本操作执行了2N+10次,通过推导大O阶方法知道,时间复杂度为 O(N)

2023-10-24 09:51:49 875 95

原创 【C语言进阶】文件操作

磁盘上的文件是文件。程序文件、数据文件(从文件功能的角度来分类的)。

2023-10-22 21:32:13 480 66

原创 【C语言进阶】指针进阶(三)

数组名是数组首元素的地址。

2023-10-21 23:46:34 534 52

原创 【C语言进阶】动态内存管理

1,这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。2,如果开辟成功,则返回一个指向开辟好空间的指针。3,如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。4,返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。5,如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器。free函数用来释放动态开辟的内存。

2023-10-18 09:59:52 345 99

原创 【C语言进阶】自定义类型:结构体,枚举,联合

1.结构体1.1结构体类的基础知识1.2结构的声明1.3特殊的声明1.4结构的自引用1.5结构体变量的定义和初始化1.6结构体内存对齐1.7修改默认对齐1.8结构体传参2.段位2.1什么是段位2.2段位的内存分配2.3位段的跨平台问题2.4位段的应用3.枚举3.1枚举类型的定义3.2枚举的优点3.3枚举的使用4.联合4.1联合类型的定义4.2联合的特点4.3联合大小的计算int x;int y;}p1;//声明类型的同时定义变量p1,p1为全局变量//定义结构体变量p2,p2为局部变量。

2023-10-17 09:49:46 529 90

原创 【C语言进阶】字符函数和字符串函数2(C语言进阶)

1、当src字符串长度小于n时,则拷贝完字符串后,剩余部分将用空字节填充,直到n个strncpy不会向dest追加’\0’。2、src和dest所指的内存区域不能重叠,且dest必须有足够的空间放置n个字符与strcpy的区别1、strcpy() 函数用来复制字符串;strncpy()用来复制字符串的前n个字符,所以要多传一个参数n2、不像strcpy(),strncpy()不会向dest追加结束标记’\0’//模拟实现strncpynum--;if (num)

2023-10-15 00:01:06 382 105

原创 【C语言进阶】字符函数和字符串函数1(C语言进阶)

代码案例:int main()return 0;运行结果:1.源字符串必须以 ‘\0’ 结束。没有‘\0’:2.会将源字符串中的 ‘\0’ 拷贝到目标空间。3.目标空间必须足够大,以确保能存放源字符串。4.目标空间必须可变。模拟实现strcpy;return ret;

2023-09-21 22:04:18 651 139

原创 【C语言进阶】指针进阶(二)

signal函数的返回类型也是函数指针类型,该类型是void( * )(int),该函数指针指向的函数,参数是int,返回类型是void。通读全文的你肯定收获满满,不久的将来会继续更新指针进阶的内容,让我们继续为C语言学习共同奋进!第二个是函数指针类型,该类型是void( * )(int)。不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。那要把函数的地址存到一个数组中,那这个数组就叫函数指针数组,那函数指针的数组如何定义呢?

2023-09-08 11:15:06 831 152

原创 【C语言进阶】指针进阶(一)

🤔下面代码哪个是数组指针?//p1, p2分别是什么?//解释:p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以p是一个指针,指向一个数组,叫数组指针。//这里要注意:[]的优先级要高于*号的,所以必须加上()来保证p先和*结合。

2023-09-05 22:40:12 1326 142

原创 C语言练习8(巩固提升)

一个数组中有一个数字出现次数大于 n/2 ,从第 0 个字符开始,假设它就是最多的那个数字,遇到相同的数字则计数 +1 , 遇到不同的则计数 -1 ,其实就是互相消耗,等到计数为 0 的时候,表示本次互拼完毕,从下一个字符重新开始互拼,但是归根结底出现次数大于 n/2 的这个数字数量更多,因此也是最后保留的字符。暴力破解即可,将 nums1 数组中的每一个数字,判断是否存在于 nums2 数组中,通过这种方式找出交集数据,找出之后判断这个数组是否已经在返回数组中存在,不存在则添加到返回数组中即可。

2023-09-03 19:42:22 675 103

原创 C语言练习7(巩固提升)

numsSize 大小的数组,其中每个元素的数据在 [1, numsSize] 区间之内,解法其实并不复杂,以数组元素的绝对值作为下标,将对应位置的数据置为负数,比如 0 号位置是 3 ,则把 3 号位置的数据重置为负值,等到数组遍历重置完毕,只有缺失的这个数字对应的位置保留正数,其他出现过的数字位置都会是负数, 要注意不要重复设置负数,因为负负得正。,输入一个整数,将这个整数以字符串的形式逆序输出,程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001。

2023-08-31 22:56:42 726 93

原创 C语言练习6(巩固提升)

x%y或者说x-y得到的结果都在[0,y-1]之间,这个结果也就可以拆分成[0,k-1]与[k,y-1],显然此时有y-1 - k +1个x可以得到后者.如下图所示.也就是说有y-k个(x,y)使得x-y≥k。3,给定一个长度为n的数组 nums ,请你找到峰值并返回其索引。当y<k时,任何一个x%y得到的结果都在[0,y-1]之间,显然y-1 < k 违背公式② k≤x%y,因此推导出y应当>k。说明:满足条件的数对有(2,3),(2,4),(2,5),(3,4),(3,5),(4,5),(5,3)

2023-08-28 21:07:44 553 117

原创 C语言练习5(巩固提升)

B:正确,将形参存在数组中,修改数组中内容,可以通过数组将修改结果带出去C:正确,形参如果用指针,最终指向的是外部的实参,在函数中对指向指向内容进行修改,改变的就是外部的实参 D:正确,全局变量不受函数的结束而结束,在函数中改变全局变量,主调函数中可以看到改变之后的结果。A:正确,形参按照值的方式传递,将来形参就是实参的一份临时拷贝,修改形参不会影响外部的实参 B:正确,形参按照指针方式传递,将来形参就是实参地址的一份拷贝,形参指向的是实参,修改形参指针指向的内容, 就是在操作实参 C:错误,

2023-08-27 20:29:27 1350 96

原创 C语言练习4(巩固提升)

中str初始化为空指针,但是str指针变量也有地址,所以参数char**p里面的p保存的是指针变量str的地址,所以调用GetMemory函数之后,动态开辟的空间的地址存放在了str中,在函数返回之后没有释放内存,但是这不会导致程序错误,只会导致内存泄漏。代码实现的思路应该是arr[i]是奇数的时候要存储起来,所以第一个空是1,最开始j是0,每次找到一个奇数就存储到arr[j]的位置,那接下里j需要+1,所以得第二个空是j++,当循环停止的时候,j其实就是奇数的个数。C选项,考虑的是数组越界问题。

2023-08-27 02:14:44 1940 118

原创 C语言练习3(巩固提升)

这部分的执行顺序如下:先执行n=b<a部分,其中,关系运算符优先级高于赋值运算符,所以先算b<a,得到0,n=0赋值运算的结果将作为括号内表达式的结果,即(n=b<a)&&(m=a)转换成(0)&&(m=a),&&运算前表达式为假,则后面的括号(m=a)不运算,m值还是0,最后,&&的结果是0,即k=0。变量a里边存的是字符’a’,第一次输出先加加再输出,输出的是’b’;,‘0’的ASCII码值是48,‘A’的ASCII码值是’65’,故’0’<c是真值1,1无疑是小于字符’9’的,最终是真。

2023-08-26 11:12:44 686 109

原创 C语言练习2(巩固提升)

本题考查的是二维数组的元素访问,A选项是 正确的,X[i]就是第i行的数组名,数组名表示首元素的地址,X[i]表示第i行的第一个元素的地址,+j后就是第i行下标为j的元素的地址,整体解引用就是X[i][j],A正确。“志之所趋,无远弗届,穷山距海,不能限也。本题主要考虑数组越界访问的情况,二维数组的行和列都是从0开始的,对于a数组来说,行下标最大是1,列下标最大是2,D选项中1>2表达式的值是0,是正确的,其他选项行和列都可能存在越界,A是行越界,B是行和列都越界,C是列越界。

2023-08-25 16:26:10 1626 124

原创 C语言练习1(巩固提升)

n为真,来到循环2判断m>n为真,执行m=m-n;先判断表达式1是否为真,若为真,则计算表达式2,并将表达式2的结果作为整个表达式最终的结果,表达式3不计算;,第一次调用函数:i初值是1,递归第二次调用函数时,i还是第一次那个变量,值已经变成了2,再一次调用函数时i就是3,依次类推。外循环有n次,当i=0,内循环为n次,当i=1,内循环为n-1次,当i=2时,内循环为n-2次,以此类推,总次数为。3=-6,再计算-6+(-6)=-12赋值给a,所以a的值为-12,也就是整个表达式的值,所以应选择D。

2023-08-24 22:37:54 1346 122

原创 特殊数字专题

例如:1, 5, 3 排序后为 1, 3, 5,则其中位数为 3。特别地,当数的个数 N 为偶数时,中位数取位置居中的两个数 (N/2 和 N/2+1) 的平均值,例如:1, 2, 3, 4,中位数为 (2+3)/2 = 2.5。(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。先求出一个数的所有因子,之后相加,若等于此数,这个数就是完数,输出。,是指除了1和本身之外,不能被其他数整除的一类数,反之,则称为。

2023-08-18 23:40:34 1269 132

原创 函数递归专题(案例超详解&&一篇讲通透)

程序调用自身的编程技巧称为递归递归做为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的主要思考方式在于把大事化小递归的两个必要条件存在限制条件,当满足这个限制条件的时候,递归便不再继续。每次递归调用之后越来越接近这个限制条件。

2023-08-16 10:33:20 3010 105

原创 扫雷(超详解+全部码源)

😀C语言实现扫雷是对基础代码能力的考察。通过本篇文章你将学会如何制作出扫雷,坚持一段时间的复习相信你肯定能够掌握扫雷(文末附三子棋全部代码)👉扫雷游戏网页版。

2023-08-09 21:33:59 22221 155

原创 【C语言进阶】深度刨析数据在内存中的储存(C语言进阶)

前面我们已经介绍过基本的内置类型,以及他们所占空间的大小✊类型的意义使用这个类型开辟内存空间的大小(大小决定了适用范围)如何看待内存空间视角什么大端小端😃大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中😊小端(存储)模式,是。指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中为什么有大端和小端😵为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8 bit。

2023-08-04 23:43:22 505 128

原创 【C语言初阶】初阶结构体(超详解)

有了结构体类型,那如何定义变量,其实很简单。int i;int num;} s1;//s1是全局变量 struct S s2;//s2是全局变量 int main() {//按照顺序初始化 struct S s3 = {//局部变量 //指定成员来初始化 struct S s4 = {//局部变量 return 0;

2023-08-02 20:47:08 854 136

原创 【C语言初阶】指针初阶(超详解)

指针变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)。那这里的问题是:1.一个小的单元到底是多大?

2023-08-02 01:21:36 664 108

原创 【C语言初阶】操作符(超详解)

int a = 0;//a变量的地址 int arr [ 10 ];//数组的地址 * p = & a;//对p进行解引用操作,* p是通过p中存放的地址,找到p指向的对象。* p其实是a return 0;sizeof 是在计算类型创建变量或者变量的大小,单位是字节sizeof 计算的结果是size_t 类型的size_t 是无符号整型的对size_t 类型的数据进行打印,可以使用%zd。

2023-07-28 23:53:49 958 103

原创 三子棋(超详解+完整码源)

C语言实现三子棋是对大家对数组,函数,循环与分支等内容的考察。通过本篇文章你将学会如何制作出三子棋,坚持一段时间的复习相信你肯定能够掌握三子棋**(文末附三子棋全部代码).**

2023-07-26 22:04:50 12355 144

原创 【C语言初阶】数组(超详解)

数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1,所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就是正确的,所以程序员写代码时,最好自己做越界的检查。1, sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节。2, &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。二维数组的使用也是通过下标的方式。

2023-07-24 23:23:21 4805 79

原创 【C语言初阶】函数(超详解)

数学中我们常见到函数的概念。但是你了解C语言中的函数吗?子程序在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。如果库函数能干所有的事情,那还要程序员干什么?

2023-07-24 00:59:13 1128 62

原创 【C语言初阶】分支和循环语句(超详解)

表达式语句函数调用语句控制语句复合语句空语句3 + 5;//表达式语句 printf("hehe\n");//函数调用语句;//空语句 - 有时候我们需要一条语句,但是这条语句什么都不需要做,就可以使用空语句 return 0;控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。条件判断语句也叫分支语句:if语句、switch语句;循环执行语句:do while语句、while语句、for语句;

2023-07-19 15:56:50 458 62

原创 【C语言初阶】初识C语言(C语言基本知识)

C语言是一门计算机通用编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简单的方式编译,处理低级储存器,产生少量的机械码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含了一些嵌入式处理器(单机芯片或称MCU)以及超级电脑等作业平台。二十世纪八十年代,为了避免个开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语言法,称为。

2023-07-06 01:39:56 945 67

空空如也

空空如也

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

TA关注的人

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