自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C和C++内存管理

delete p2;return 0;大家可以看到c++这块new与delete会自动调用自定义类型的构造和析构函数。int _val;//c++的struct里的变量与函数均为共有的,这一部分前面讲过int main()return 0;这里是不是相较于c里的初始化啊,插入什么的简单许多。

2024-09-07 06:30:38 151

原创 日期类-刷题部分

这一节带大家解决一些日期类的问题

2024-09-04 16:19:24 766 5

原创 类与对象(下)

什么意思呢?

2024-09-01 14:54:43 880 1

原创 c++类(中)续

看完这一章,大家可以深入了解c++默认成员函数怎么使用等

2024-08-30 13:13:06 930 5

原创 二叉树刷题(2)

在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在大家对二叉树结构掌握还不够深入,为了降低大家学习成本,此处手动快速创建一棵简单的二叉树,快速进入二叉树操作学习,等二叉树结构了解的差不多时,我们反过头再来研究二叉树真正的创建方式。总的来说二叉树这一块需要锻炼我们的递归思想,还是非常的有难度,希望大家不要放弃,通过刷题去增强自己的信心。

2024-08-24 18:59:30 266

原创 二叉树刷题(1)

这道题我们首先需要判断树是否为空,如果为空则返回true,如果不是空树,我们就比较左子树的值与根节点的值是否相等,再比较右子树的值与根节点是否相等,如果不相等则返回false,最后递归我们的左子树与右子树。首先我们需要判断两棵树是否都为空以及一个不为空一个为空这两种情况,在判断完上面以后我们的两棵树一定都有根节点,然后我们判断根的值是否相等,最后遍历我们的左树的左树与右数的左树,左树的右树与右树的右树即可。构建树的过程如图所示,先创建根节点,然后遍历左子树,然后右子树,所以建树的过程是递归的过程。

2024-08-24 17:43:45 1514

原创 c++-类(中)

主要介绍c++类的语法,内容比较长,希望大家可以认真看下

2024-08-23 07:16:27 445

原创 二叉树--堆

这里我排的是逆序的,为什么这里是逆序的呢?这是因为我们建的小堆,我们选小的在我们的数组末尾,那我们是不是可以总结一个规律啊!

2024-08-20 16:28:16 1009

原创 c++--类(上)

1、class为定义类的关键字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。int*arr;int size;//成员变量int Top();void Pop();//成员函数这个就是一个栈的类,它与结构体不同,类是变量与函数不分离。2、为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者 m开头。

2024-08-20 08:37:08 1207

原创 初识--树(1)

二叉树

2024-08-18 23:28:11 1091

原创 c语言---文件

当我们了解内存划分以后,我们可以知道如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要。每个被使⽤的⽂件都在内存中开辟了⼀个相应的⽂件信息区,⽤来存放⽂件的相关信息(如⽂件的名字,⽂件状态及⽂件当前的位置等)。但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)。⽂件的内容不⼀定是程序,⽽是程序运⾏时读写的数据,⽐如程序运⾏需要从中读取数据的⽂件,或者输出内容的⽂件。

2024-08-16 22:56:24 1013

原创 排序(2)

1、原理:归并排序也是分割区间的问题,但归并排序是一个后序遍历,先开辟一个与原数组同样大小的数组,再将区间划分为1个元素与另1个元素这样的最小区间,然后比较这两者的值,比较完后,小的先放入区间,大的依次放入,然后回到上一层,两个元素与两个元素这样的区间,再比较,直到将整个数组排完。这样我们的第一趟排序就排好了,这趟排序选好了相遇位置处的数据,选好之后左边全是比3小的数,右边全是比3大的数,之后再将其进行一次前序遍历。首先是我们的堆排,这一部分属于树的内容,我先简单的介绍一下堆排,后面再介绍二叉树。

2024-08-13 21:40:22 945

原创 数据结构-排序(1)

1、原理:我们遍历一遍数组,开一个数组中最大数字空间的数组(初始所有位置全为0),然后再遍历数组,原数组出现哪个数字,在开辟的数组对应下标位置处+1,然后再依次遍历开辟的数组,将数组元素不为0的位置赋值回原数组,数组元素为几就赋值几次。上面我们写了插入排序,那要是原数组中的数据与我们要排的数据顺序刚好相反,那么插入排序就会走满每一趟排序,那么它的效率就会退化,可能会变成冒泡的效率。黑线长度一样的排序代表他们的时间复杂度在一个量级,也就是排序所花费的时间差距不大,并且黑线越长排序越快。,效率差距如此大呢?

2024-08-09 15:38:54 1002

原创 c++入门基础

c++基础知识

2024-07-11 09:58:14 806

原创 单链表实现通讯录

那么我们该如何选择呢?:上面我们知道我们是由一个结构体来储存我们的联系人信息,我们就需要定义一个person联系人的结构体,然后我们之前写的链表里每个节点存储的数据的类型是int型,我们需要将其改为我们现在的person型。1、增加联系人,上面我们说过增加联系人就是调用我们的单链表的插入函数,我们写单链表的时候写了单链表的头插与尾插,在这里都可以,但是为了更符合日常我在这里采用尾插。,就需要遍历整个链表,找到需要删除的联系人的前一个节点,然后将前一个节点与后一个节点连接,最后释放掉需要删除的节点即可。

2024-06-01 11:25:10 1705 1

原创 栈与队列的实现

队列的实现也能用数组与链表实现,但是如果用数组实现的话,出队的时候涉及到后面的元素向前移,时间复杂度较大,而用链表的话只需要释放掉第一个节点,然后head指针后移。在这里可以看到我们定义了两个结构体,第一个结构体是队列的节点的结构体,第二个结构体存放的是指向队列的头的指针与指向尾的指针,以及队列大小的size。如果我们直接释放掉外层的ptr的话,里面的节点并没有被释放,所以我们需要一个一个节点的释放,最后释放ptr。取栈顶元素的时候需要注意,我们这里的size是指向栈顶元素的下一位,所以取的时候需要-1;

2024-05-28 22:31:21 771 1

原创 三个有意思的链表面试题的完成

相信不少朋友看到这题目就已经晕了,那就简单说明下这个题目,题目就是创建一个链表,其中每个节点有两部分–指针域与数值域,指针域里也有两个指针next(指向下一个节点),random(随机指向),要求我们拷贝一份这个链表,使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点。也就是上图的形式,这个题目如果单纯的只拷贝一份链表和每个节点的val,相信大家可以很快的做出,也就是遍历一下原链表,遍历一个节点创建一个新的节点并拷贝值,最后将节点连接形成链表即可。

2024-05-25 23:13:48 1095 2

原创 双向链表的实现

上一节我们写单链表的尾插数据,当我们没有头结点的时候,需要将创建的第一个节点作为头结点,这样是不是很麻烦啊,那我们是不是可以在插入节点之前手动创建一个节点,它不存入任何数据,只是充当头的作用,我们需要尾插数据的时候,直接调用尾插的函数即可,头插也只需要将新节点插入这个节点之后,那么这样的节点我们称它为–在初始化的时候调用即可。上一节我们知道单链表中的一个节点就是一个结构体,它存放了数据域与指针域,但是指针域里只存放了一个指向下一个节点的next指针,而在双向链表中还存放了一个指向上一个节点的prev指针。

2024-05-21 18:21:09 1054 3

原创 单链表的实现

前面我们完成了顺序表以及通讯录,为了节省空间,在顺序表中我们是以2倍的方式来扩大我们的存储空间的,但是假如我们存入10001个数据,那么程序就会将空间扩大到20000,会浪费9999个空间,这样看的话我们浪费的空间仍然比较多,那么有没有办法不浪费我们的空间呢?我们使用链表是让其实现与通讯录,顺序表一样的存储数据的功能,那么我们就需要链表完成与顺序表一样的增,删,查,找的功能。我们想一下,当我们使用这些函数的时候我们是不是需要传入指向这个链表的头节点的指针,当我们直接传入这个指针时,实际上是。

2024-05-07 23:42:40 514 1

原创 通讯录(基于顺序表)

那我们在使用这个通讯录的使用其实是使用我们外层的数组结构体,那我们既然要使用外层的数组结构那我们这里的contact.h是不是需要包含SeqList.h这个头文件,那我们这里能写#include“SeqList.h”吗?(4)、删除联系人:删除与增加有些许不同,我们删除是不是要先选择我们删除的对象,那根据什么来选择我们删除的对象呢?(3)、上面的完成了,我们是不是该往我们的通讯录里添加联系人信息了,那我们前面写了头插数据,尾插数据,还有在指定位置插入数据,这三个我们都可以使用,我这里使用尾插联系人;

2024-04-27 11:04:10 876 2

原创 c语言实现通讯录底层(顺序表)

2、动态顺序表,不指定顺序表的大小,通过后续存入数据,当开辟的空间存满而自动开辟新的空间供我们存入数据。但是插入数据之前我们是不是应该检查下我们的数组是否已经被存满,如果已经存满的话,我们就需要将这个数组扩容,还有我们初始化后数组空间是0,那我们应该给这个数组创建空间。当我们存入9个数据将原先的8个空间占满时,程序会自动开辟新的空间,我们在relloc中扩充的是原先内存的两倍,故这里空间扩大一倍。通过调试我们可以看到我们成功的存入了1,2,3,4,5这5个数据,并且展示了当前所存元素个数与当前内存。

2024-04-24 19:49:53 1144 3

原创 指针详解(四)

这里我们可以很清楚地看到函数有其地址,并且函数名就是函数的地址,当然&数组名也可以得到函数的地址,所以我们要将函数的地址存放起来就得创建指针变量,例如函数指针----int (*)(int ,int)。: sizeof 是计算变量所占内存空间⼤⼩的,单位是字节,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的⼤⼩。定义:把函数的地址存到⼀个数组中,那这个数组就叫函数指针数组,对比之前的数组指针与指针数组,也就是函数指针数组是一个数组,存放的是函数的地址。那么指针类型是否也可以给它换个名字?

2024-04-17 16:54:44 737 2

原创 指针详解(三)

之前我们所介绍的全都是一级指针,在这里我介绍下二级指针,我们寄存地址用的是一个指针变量,指针变量也是变量,那么指针变量的地址存放在哪里?(2)&数组名,这里的数组名也代指整个数组,取出的是整个数组的地址,打印出的地址虽然也指向首元素地址,但是若是&数组名+1,跳过了整个数组。p是⼀个指针,指向⼀个数组,叫 数组指针。那么数组指针同理,例如整形数组指针—int( * p)[10],p存放的是一个有着10个元素的数组的地址,即首元素的地址。我们类⽐⼀下,整型数组,是存放整型的数组,字符数组是存放字符的数组。

2024-04-16 21:42:20 1087 1

原创 详解指针(二)

在指针类型中有⼀种特殊的类型是 void* 类型的,可以理解为⽆具体类型的指针(或者叫泛型指针),这种类型的指针可以⽤来接受任意类型地址。–(在函数参数的部分,⽤来接收不同类型数据的地址,这样的设计可以实现泛型编程的效果。在这里n的值被改变了,如果p拿到n的地址就能修改n,这样就打破了const的限制,这是不合理的,所以应该让p拿到n的地址也不能修改n,那接下来怎么做呢?2、const如果放在 * 的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指向的内容,可以通过指针改变。

2024-04-15 18:48:41 916 3

原创 详解指针(一)

详细介绍指针

2024-04-14 20:37:03 1003 2

原创 在内存中,整数和浮点数是如何存储的

主要帮助理解计算机存储浮点数的原理

2024-04-08 08:06:09 396 2

原创 c语言(1.函数指针数组、2.回调函数)实现简易计算器

为指针部分加深记忆

2024-03-25 18:25:23 475 3

原创 c语言实现扫雷游戏

扫雷游戏准备阶段:1,如何在棋盘上生成雷(利用rand函数(生成随机数函数)分别生成雷的横纵坐标,再根据坐标将雷的数字赋值给该处二维数组a[i][j]);2,为了便于统计我们可以将1定义为雷,其余位置定义为0,这样我们只需根据猜的位置的数字就可推测周围有几颗雷,例如数字为3,则周围有3个雷,但是如果出现1,那么该处的1我们不知道是其周围有一个雷还是该坐标本身是一个雷,因此我们需要创建两个二维数组作为棋盘:一个作为放置雷的棋盘,一个作为显示周围雷的情况的棋盘。3,假如我们定义9。

2024-03-14 23:32:03 597 5

原创 c语言实现1-100猜数字游戏

本文会帮助了解time函数,随机数rand函数生成规则,了解猜数字游戏的实现

2024-03-09 09:41:12 866 5

空空如也

空空如也

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

TA关注的人

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