自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】C/C++内存管理

new的原理1.调用operator new函数申请空间2.在申请的空间上执行构造函数,完成对象的构造delete的原理1.在空间上执行析构函数,完成对象中资源的清理工作2.调用operator delete 函数释放对象的空间new T[ N ]的原理1.调用operator new[ ]函数, 在operator new[ ]中实际调用operator new函数完成N个对象空间的申请2.在申请空间上执行N次构造函数delete T[ N ]的原理。

2024-01-19 10:43:43 862

原创 类和对象(下篇)

定义时不添加static关键字,类中只是声明3.类静态成员即可用。

2024-01-18 15:22:42 875

原创 【C++】类和对象【中】

4.编译器生成的默认拷贝构造函数已经可以完成字节序的值拷贝5.拷贝构造函数典型调用场景使用已存在对象创建新对象函数参数类型为类类型对象函数返回值类型为类类型对象自定义类型传值传参必须要调用拷贝构造,如果不调用就会发生浅拷贝问题【析构函数被多次调用,一块儿空间被多次释放,这是不允许的】

2024-01-18 09:34:09 894

原创 【数据结构】二叉树

跟的子节点为第二层,以此类推树的高度或深度:树中节点的最大层次;上面这棵树的高度是4堂兄弟节点:双亲在同一层的节点互为堂兄弟;J、K是堂兄弟节点节点的祖先:从根到该节点所经分支上的所有节点;A是E的祖先子孙:以某节点为根的自述中任一节点都称为该节点的子孙;I、J、P、Q都是E的子孙。

2023-08-19 15:22:30 5025 3

原创 【C++】类和对象(上)

/类体:由成员函数和成员变量组成//一定要注意后面的分号class为定义类的关键字,className为类的名字,{ }为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数类的两种定义方式:1.声明和定义全部放到类体中,需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理public:i < top;int* a;

2023-08-02 13:33:46 148

原创 【C++】C++入门

使用namespace关键字namespace 名字//....int main()return 0;输出:命名空间可以嵌套命名空间一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。

2023-08-01 18:31:21 205

原创 【数据结构】双向链表

带头双向循环链表:结构最复杂,一般用在单独存储数据,实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然复杂,但是使用代码实现以后会发现这个结构会带来很多优势,实现反而简单。无头单向非循环链表:结构简单,一般不会单独用来存储数据,实际中更多是作为其他数据结构的子结构。双向链表的实现看起来复杂,实际上比单链表更加好用。

2023-07-18 12:00:00 94

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

栈:一种特殊的线性表,只允许再固定的一端进行插入和删除操作,进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据遵循先进后出的原则压栈:栈插入操作叫做进栈/压栈/入栈。入数据在栈顶出栈:栈的删除操作叫做出栈。出数据也在栈顶。

2023-07-17 16:51:40 508

原创 【数据结构】单链表

为什么要学习链表?前面我们所学习的顺序表是存在缺陷的顺序表的缺陷:1.空间不够用就需要扩容,扩容可能会是异地扩容,并且扩容是会发生代价的,可能会造成空间的浪费2.头部或者中间部分的删除,需要大量的移动数据,效率低下优化方案:1.按需申请空间2.尽可能少的移动数据,或者是不移动数据。

2023-04-27 20:51:34 446 1

原创 【C语言】文件操作

磁盘上的文件是文件,电脑上C盘、D盘上的文件就是文件一般文件分为程序文件和数据文件(从文件功能的角度来分类的)

2023-04-12 16:19:00 330

原创 【leetcode】20.有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。遇到左括号进栈,遇到右括号就出栈,看是否匹配。每个右括号都有一个对应的相同类型的左括号。左括号必须用相同类型的右括号闭合。输入:s = "()[]{}"左括号必须以正确的顺序闭合。输入:s = "()"输入:s = "(]"

2023-01-25 14:22:01 58

原创 【数据结构】栈

一般可以使用数组或者链表来实现,但是相对而言数组的结构更加方便一些,数组在进行尾插数据时更加方便,栈的特点时先进后出,一般来说不会在头删、头插、中间的插入和删除,多数情况都在栈顶进行数据的插入(尾插),所以。如果想要在主函数中打印出栈中元素个数,我们就需要关心top初始化为哪种情况,而单独分装一个函数,直接在主函数中调用即可。这里的StackSize接口函数中只有两行代码,为什么需要单独分装一个函数,为什么不在主函数中计算元素的个数?栈:一种特殊的线性表,只允许在固定的一端进行插入和删除的操作,

2023-01-25 13:28:55 788

原创 【leetcode】88.合并两个有序数组

为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。注意合并后的数组不是由函数返回而是存储再nums1中,所以思路2的方法不可行,并且题目中给了nums数组的长度是m+n。两个数组中的内容进行比较,取小的放到新数组中,当一个数组走完了,将另一个数组剩下的内容放到新数组中即可。情况2:nums1中数据先走完,nums2中的数据还没走完,num2中的数据还要继续拷贝到nums1中。情况1:i2中数据先结束,剩下的数据就不需要动了。

2023-01-08 12:00:00 94

原创 【leetcode】26.删除有序数组中的重复项

由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。将最终结果插入 nums 的前 k 个位置后返回 k。的思想,与上一个leetcode中思想一致。

2023-01-07 12:00:00 46

原创 【leetcode】27.移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

2023-01-06 12:00:00 53

原创 【数据结构】顺序表

【本篇内容】线性表顺序表线性表是n个具有相同特性的数据元素的有限序列。常见的线性表:顺序表、链表、栈、队列、字符串......线性表在逻辑上是线性结构,但是在物理结构上并一定是连续的,线性表在物理上存储时,通常是以数组和链式结构的形式存储的。

2023-01-05 15:17:19 232 1

原创 【leetcode】189.轮转数组

给一个数组,将数组中的元素向右轮转k个位置,其中k是非负数。

2022-11-26 16:07:22 277

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

衡量一个算法的好坏一般是从时间和空间上来衡量的,即时间复杂度和空间复杂度,时间复杂度是衡量一个算法的运行快慢,而空间复杂度主要是衡量一个算法所需要的额外的空间,当前计算机的存储容量已经达到了很高的程度,所以我们一般不再关注一个算法的空间复杂度,算法的时间复杂度是一个函数(数学中的函数)定量的描述算法的运行时间,一个算法所耗费的时间与其中语句执行的次数成正比例,第一个for循环执行N次,第二个for循环执行M次,计算出的时间复杂度应该是N+M,算法中的基本操作的执行次数为算法的时间复杂度。

2022-11-25 12:00:00 171

原创 【C语言】atoi的模拟实现

在模拟实现atoi函数前,我们要了解atoi的使用atoi函数是将数字字符串转换为对应的数字,比如输入字符串“-123”,打印出整型数字-123。

2022-10-22 14:03:58 653

原创 【C语言】寻找单身狗

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。

2022-10-16 08:03:30 278

原创 【C语言】详解qsort函数使用和模拟实现

详解qsort函数的模拟实现,之前在指针中的进阶中有大概写qsort函数的使用和模拟实现,这里单独摘出并详细的讲解qsort函数的使用和模拟实现

2022-10-08 17:50:56 503

原创 动态内存管理(2)

回顾:1.为什么要有动态内存管理?2.动态内存管理是在堆区上进行内存空间的开辟,开辟到是一块连续的空间int main(){//等价于malloc ( 40 );}

2022-10-07 19:47:27 242

原创 字符串左旋

实现一个函数,可以左旋字符串中的k个字符eg:ABCD左旋一个字符得到BCDAABCD左旋两个字符得到CDAB。

2022-10-02 20:34:49 91

原创 简易版通讯录

实现一个通讯录:通讯录可以用存储100个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址这个通讯录与前面写的小游戏一样,使用三个文件contact.h---函数的声明contact.c---功能的实现test.c---通讯录的测试。

2022-09-24 15:14:34 2319

原创 动态内存管理(1)

C语言提供了一个动态内存开辟的函数使用malloc函数的头文件为#include这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针如果开辟成功,则返回一个指向开辟好空间的指针如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查返回值的类型时void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用由自己来决定如果参数size为0,malloc的行为是标准未定义的,取决于编译器。

2022-09-24 13:39:03 58

原创 自定义类型(3)

打印出来的结果:枚举常量的值是不可以更改的,但是给常量一个值,如果不给值,就是0,下面的常量依次加一,但是如果给常量一个值,后面的常量就是从这个值开始依次+11.2枚举的优点为什么使用枚举?我们可以使用#define定义常量,为什么非要使用枚举?1.增加代码的可读性和可维护性2.和#define定义的标识符比较枚举有类型检查,更加严谨4.便于调试test.c到test.exe,test.c要经历预处理(预编译)、编译、汇编、链接才能到test.c。

2022-09-22 20:41:21 61

原创 自定义类型(2)

位段的声明和结构体是类似的,有两个不同:1.位段的成员必须是int、unsigned int或signed int2.位段的成员名后边有一个冒号和一个数字位段A的大小:是八个字节,首先要知道位段中位是什么-->它指的是也就是说_a:2;的意思就是说_a这个成员只需要2个比特位;_b成员只需要5个比特位;_c成员只需要5个比特位;_d成员只需要30个比特位这里struct A中总的字节大小是47bit,需要6byte,但是我们算出struct A实际上需要8byte,为什么?

2022-09-21 11:58:44 71

原创 字符串+内存函数的介绍(1)

C语言中对字符和字符串的处理是很频繁,但是C语言本身是没有字符串类型的,字符串通常仿造常量字符串或者字符数组中,字符串常量适用于那些对它不做修饰的字符串函数重点介绍处理字符和字符串的库函数的使用和注意事项strlenstrcpystrcatstrcmpstrncpystrncatstrncmpstrstrstrokstrerror字符操作memcpymemmovememsetmemcmp。

2022-09-18 10:29:28 1959

原创 自定义类型(1)

{int price;}sb1 = {"C语言程序与设计","谭浩强",55,"THQ10001"},sb2;int main(){struct Book sb2 = { "数据结构","李春葆","59","LCB10001" };}也可以不按照顺序进行初始化。

2022-09-17 18:34:26 83

原创 指针笔试题

二维数组sizeof内部的表达式不参与运算,那么为什么呢?原因:当我们写代码的时候是在test.c文件,但是在运行的时候是test.exe文件中运行源代码要经过编译然后再加上链接,成为可执行程序才能运行,运算是在运行的过程中才完成的,但是sizeof在编译期间就完成了,所以sizeof内部的表达式不参与运算总结:数组名的意义:1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址。

2022-09-10 07:31:22 77

原创 指针和数组笔试题解析(1)

strlen求字符串长度的计算的是字符串中\0之前出现的字符的个数,统计到\0为止,如果没找到\0,会继续往后找。注意:strlen是库函数,需要包含头文件#includesizeof是计算对象或者类型创建的对象所占内存空间的大小,单位是字节。sizeof是操作符,不是函数。

2022-09-07 13:54:03 64

原创 验证尼科彻斯定理

每一个元素开始都是奇数,并且后面的数字都是开始元素依次+2,元素的个数是它输入数的数值。输入一个正整数m(m≤100),将m的立方写成m个连续奇数之和的形式输出。

2022-08-26 11:05:13 217

原创 指针(进阶)

数组指针是指针去掉名字就是它的类型这里的(*p)就相当于arr一般情况下,数组指针应用于二维数组数组指针的应用p+i相当于第i的地址3.2 &数组名和数组名数组名是数组首元素的地址1.sizeof(数组名)2.&数组名/ /整型数组/ /指针数组/ /数组指针parr3 是存放数组指针的数组/ /将名字parr3 [ 10 ] 去掉/ /int (*) [ 5 ] - ->数组的元素类型。...

2022-08-13 19:27:24 133

原创 数据的存储(2)(浮点数)

打印出来的结果是死循环,从9 8 7 6 5 4 3 2 1 0然后开始是很大的数,因为是无符号整数,当打印我们所认为的负数的时候,对于无符号来说就是很大的数,对于i>=0恒成立故后面开始死循环char类型的范围是-1~-128、0~127,然后strlen遇到\0就停止,并且\0的ASCII码值是0,也就是当a[i]==0时就停止所以打印出的结果时255注意:ASCII码值时没有负数的unsigned char 的取值范围时0~255所以i...

2022-08-10 17:17:20 239

原创 数据的存储(1)

前面我们已经学习了基本的内置类型(C语言本身就具有的类型):char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形(C99中才引入的)float //单精度浮点数double //双精度浮点数//C语言有没有字符串类型以及他们所存储空间的大小1.使用这个类型开辟内存空间的大小(大小决定了使用范围)2.如何看待内存空间的视角。...

2022-08-09 14:22:56 253

原创 扫雷游戏(基础版本)

首先这扫雷游戏是一个棋盘,随便点开一个位置,如果是雷,就被炸死,如果不是雷,就需要提示一下周围八个坐标有几个雷像边缘处的地方,查找周围的八个坐标会发生数组越界,所以在创建数组时,要比我们想要展示的棋盘多两行两列(上下各多一行,左右各多一列)。当我们把所有的雷排查掉时,游戏结束如何设计一个扫雷游戏?要设置雷的个数,向上面的9*9的棋盘中,有十个雷,我们需要一个数组存放我们的雷,上面讲了,我们学要多设置两行两列的数组,所以在9*9的扫雷游戏中,我们需要11*11的数组。把雷按上,是雷的地..

2022-08-08 12:37:27 690

原创 实用调试技巧

第一次被发现的导致计算机错误的飞蛾,也是第一个计算机程序错误。后来把导致计算机出现问题的错误称之为bugDebug通常称为调试版本,它包含调试信息,并且不做任何优化,便于程序员调试程序Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用Debug版本是程序员用于寻找错误的版本Release版本是用户使用的版本,没有调试信息在环境中选择debug选项,才能是代码正常调试。...

2022-08-06 13:43:23 692

原创 三子棋游戏

test.c //测试游戏的逻辑game.c //游戏代码的实现game.h //游戏代码的声明

2022-07-29 16:54:52 459

原创 C语言实现猜数字游戏

3.要求是随机生成1~100之间的随机数,而rand函数生成随机数的范围是0到RAND_MAX之间,所以rand函数要%100+1(任何数%100都是0~99的数,+1范围便是1~100)使用rand函数,生成随机数,使用rand函数之前,要先使用srand函数才能生成随机数,srand函数只要调用一次就可以生成随机数,所以在主函数中使用即可。使用srand函数的参数是要一直变化的数才能生成随机数,时间是一直变化的,引入时间戳,在C语言中,使用时间戳相当于C语言中的time函数。.........

2022-07-21 20:25:28 806

原创 指针进阶(1)

数组指针是指针整形指针int*p;能够指向整型数据的指针浮点型指针float*p;能够指向浮点型数组的指针所以数组指针是能够指向数组的指针//指针数组//数组指针,p2可以指向一个数组,该数组有10个元素,每个元素是整型类型解释//p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以p是一个指针,指向一个数组,叫数组指针//这里要注意[]的优先级要高于*号的,所以必须加上()来保证p先和*结合。...

2022-07-19 16:11:45 500

空空如也

空空如也

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

TA关注的人

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