自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

这个语法其实是对前面的构造函数的补充。最重要的是初始化列表的使用,及其特性,隐式类型转换,还有当前阶段需要了解的 explicit 关键字。初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。1.1 初始化列表的使用当我们实现一个MyQueue(用两个栈模拟一个队列)时,如果栈不具备默认构造,MyQueue也无法生成默认构造,此时MyQueue要显示实现默认构造。如何实现呢?必须用初始化列表。初始化列表的本质:可以理解为每个对象中成员定义的地

2024-05-01 08:34:42 602 27

原创 【C++】:日期类的实现 -- 日期计算器

在C++中,由于。

2024-04-30 07:42:33 526 86

原创 【C++】:const成员,取地址及const取地址操作符重载

这两个默认成员函数一般不用我们自己定义 ,编译器默认会生成。取地址操作函数和加了const的取地址操作函数构成重载。,const修饰类成员函数,实际修饰该成员函数。,表明在该成员函数中。

2024-04-29 07:41:28 426 110

原创 【C++】:拷贝构造函数和赋值运算符重载

拷贝构造函数是特殊的构造函数。是用一个已经存在的对象,赋值拷贝给另一个新创建的已经存在的对象。本质:用同类型的对象拷贝初始化。1.如果没有管理资源,一般情况下不需要写拷贝构造,用编译器默认生成的拷贝构造就可以。如 Date类;2.如果都是自定义类型成员,内置类型成员没有指向资源,用编译器默认生成的拷贝构造就可以。如 MyQueue;(小技巧:一般情况下,不需要写析构的,就不需要写拷贝构造。3.如果内部有指针或者有一些值指向资源,需要显式写析构函数释放,通常就需要显式写拷贝构造完成深拷贝。

2024-04-25 22:04:15 978 120

原创 【C++】:构造函数和析构函数

如果一个类中什么成员都没有,简称为空类。空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。默认成员函数用户没有显式实现,编译器会生成的成员函数称为默认成员函数。这篇文章介绍的是构造函数和析构函数。1.一般情况下构造函数都需要我们自己显式的去实现。2.只有少数情况下可以让编译器自动生成构造函数。(类似用两个栈实现队列的MyQueue,它的成员都是自定义类型)

2024-04-23 15:21:29 1135 102

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

/ 类体:由成员函数和成员变量组成 };// 一定要注意后面的分号。

2024-04-22 07:43:15 1200 110

原创 【C++】:函数重载,引用,内联函数,auto关键字,基于范围的for循环,nullptr关键字

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。1.权限放大问题存在于引用和指针里,普通的赋值拷贝不会。2.权限只能缩小,平移,不能放大。

2024-04-20 21:56:44 1168 95

原创 【C++】:C++关键字,命名空间,输入&输出,缺省参数

注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。int val;一个工程中的 test.h 和上面 test.cpp 中两个N1会被合并成一个。但是合并后不能有同名的变量,函数等,否则也会报错。要用嵌套解决。所以命名空间不能随便展开!int a = 0;int b = 1;int c = 2;int a = 0;int b = 1;int c = 2;//展开命名空间int main()return 0;

2024-04-19 22:26:46 1315 93

原创 【C语言】:预处理详解

C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理的。1.__FILE__ //进⾏编译的源⽂件2.__LINE__ //⽂件当前的⾏号3.__DATE__ //⽂件被编译的⽇期4.__TIME__ //⽂件被编译的时间5.__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义int main()return 0;;) //⽤更形象的符号来替换⼀种实现2.2 续行符的使用如果定义的 stuff过⻓,可以分成⼏⾏写,除了最后⼀⾏外,

2024-04-16 07:43:30 1482 136

原创 【C语言】:浅谈函数 fscanf/sscanf 和 fprintf/sprintf

把数据以格式化的形式写入指定的输出流上。1.2 参数:该函数的参数与 printf 函数的参数类似,只是多了一个文件流。从指定的输入流上读取格式化数据。1.2 参数:该函数的参数与 scanf 函数的参数类似,只是多了一个文件流。把格式化的数据写入到字符串中。其实就是把格式化的数据转化成字符串了。1.2 参数:该函数的参数与 printf 函数的参数类似,只是多了一个字符串指针。在字符串中读取格式化的数据。1.2 参数:该函数的参数与 scanf 函数的参数类似,只是多了一个字符串指针。

2024-04-15 07:37:43 667 94

原创 【数据结构与算法】:二叉树经典OJ

这道题的意思是对二叉树进行前序遍历,把每个结点的值都存入一个数组中,并且返回这个数组。思路:这题与我们平时写的二叉树前序遍历不同。需要我们自己开辟空间,但又由于二叉树结点个数未知,所以在开辟空间之前要先计算结点个数,根据结点个数开辟空间。最后再利用分治递归进行前序遍历。代码实现如下:注意:(1) 结点个数的计算,数组空间的开辟;(2) 递归时一般用子函数 _prevOrder 递归,而不是 preorderTraversal 原函数,不然会重复的开辟空间;(3) 局部变量 i 一定要传地址,因为每一层

2024-04-14 08:54:20 822 77

原创 【数据结构与算法】:10道链表经典OJ

思路1:遍历原链表,将 val 所在的节点释放掉。(太麻烦)思路2:创建新链表,再遍历原链表,找到不为 val 的节点尾插到新链表。思路1代码实现如下:注意:1.当链表为空时,直接返回NULL即可。2.当尾插上最后一个有效节点时,此时它的 next 可能还与最后一个节点相链接,一定要断开!2. 反转链表思路:定义三个变量 n1,n2,n3,根据它们的指向关系进行迭代。代码实现如下:注意:1.当链表为空时,直接返回NULL即可。2.在迭代过程中别忘记判断 n3 ,防止对空指针解引用。3.注意循

2024-04-13 10:57:05 1509 72

原创 【数据结构与算法】:快速排序和归并排序的非递归实现

3.1.首先要先把数组。

2024-04-10 15:33:26 1330 76

原创 【数据结构与算法】:归并排序和计数排序

归并排序是一种效率仅次于快速排序的排序算法。它有非递归和递归两种实现方式(本文只讲述递归实现,非递归实现以后有专门的文章)。1.算法思想:归并排序采用分治法。首先假设一组数据的左半区间有序,右半区间有序,将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。所谓 归并,就是将两组有序的数据合成为一组有序的数据。 例如有如下两个有序数组,将两个有序数组归并为一个有序数组,这就是一次归并操作。2.归并操作的工作原理如下:第一步:申请空间

2024-04-09 11:09:39 1177 43

原创 【数据结构与算法】:堆排序和选择排序

3.

2024-04-08 18:51:51 1379 30

原创 【数据结构与算法】:快速排序和冒泡排序

快速排序的三种思想虽然实现方式不同,但是最终结果都是以key为基准值把整个数组分割成左右两个子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值。在我们日常写快速排序算法时,那两种优化方式三数取中,最小区间优化并不是一定要有,可以根据情况自主添加。//当左右子区间不存在,或只有一个元素时,//就不需要递归了,排序完成return;//这是排一趟,只排好了一个数//左边有坑,右边end找比key小的end--;//小的放到了左边的坑里,右边end自己形成了新的坑。

2024-04-08 09:05:25 1453 39

原创 【数据结构与算法】:直接插入排序和希尔排序

是一个边界。

2024-04-06 16:27:48 1331 41

原创 数据结构:详解【树和二叉树】

则这个二叉树就是完全二叉树。(3)对这两种二叉树的有关数据的推导。

2024-04-05 19:56:40 1455 30

原创 基于顺序表 --- 实现简易【通讯录】

这里一定不能忽略。

2024-04-04 11:17:10 766 42

原创 实现offsetof宏以及交换一个整数二进制奇偶位的宏

(1)功能:用来计算。

2024-04-01 21:12:17 424 19

原创 【C语言】:编译与链接

我们写一个程序,例如test.c或是test.h这些源文件,头文件,事实上这些代码都是文本文件,但是计算机能够看得懂,并且直接执行这些C语言代码吗?答案是不能。计算机能够执行的是二进制指令。所以文本文件需要通过编译,链接等一系列处理变成二进制文件。实际上计算机的编译和链接是一个十分复杂的过程,这篇文章只是非常简洁的讲解了一个C的程序是如何编译和链接,到最终生成可执行程序的过程,其实很多内部的细节无法展开讲解。如果你有兴趣,可以看《程序的自我修养》一书来详细了解。

2024-03-26 15:24:15 1419 38

原创 详解【atoi函数】的使用及其模拟实现

1.函数功能把字符串转换为整数。2.函数介绍(2)函数参数const – 保证在函数运行的过程中,str指向的字符串不被改变,是一种保护措施。str – 指针变量,指向的是需要转换字符串的首地址。(3)返回值若转换成功,函数则返回转换后的整数;若转换失败,则返回0。3.函数的使用atoi为库函数,使用时要包含头文件//情况1 //char* str = "1234";//1234 //情况2:含前导空格 //char* str = " 1234";

2024-03-24 17:07:51 768 34

原创 数据结构:详解【栈和队列】的实现

栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾插和头删的实际复杂度为O(1),是非常合适的。因为如果使用数组的结构,出队列在数组头上出数据,这时需要挪动数据,时间复杂度为O(n),效率会比较低。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。而单链表的尾插和头删的时间复杂度为O(1),十分合适。压栈:栈的插入操作叫做进栈/压栈/入栈。队列也可以数组和链表的结构实现,使用。出队列:进行删除操作的一端称为。出栈:栈的删除操作叫做出栈。

2024-03-22 21:34:11 1507 19

原创 有关【指针运算】的经典笔试题

【代码】有关【指针运算】的经典笔试题。

2024-03-19 09:50:17 674 20

原创 【C语言】:字符分类与转换函数

C语言中有⼀系列的函数是专门做字符分类的,也就是⼀个字符是属于什么类型的字符的。这些函数的使用都需要包含⼀个头文件是。上面的代码,我们将小写转大写,是-32完成的效果,有了转换函数,就可以直接使用 tolower 函数。例如:写⼀个代码,将字符串中的小写字母转大写,其他字符不变。

2024-03-18 15:51:10 479 18

原创 数据结构:详解【链表】的实现(单向链表+双向链表)

1.顺序表的问题和思考问题:中间/头部的插入删除,时间复杂度为O(N)。增容需要申请新空间,拷贝数据,释放旧空间,会有不小的消耗。增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。思考:如何解决以上问题呢?下面给出了链表的结构来看看。

2024-03-17 11:33:17 1130 38

原创 数据结构:详解【顺序表】的实现

顺序表是用一段的存储单元的线性结构,一般情况下采用数组存储。动态顺序表与数组的本质区别是——

2024-03-13 15:25:13 1435 23

原创 C语言 —— 图形打印

【代码】C语言 —— 图形打印。

2024-03-12 20:46:12 759 13

原创 C语言——递归题

思路:同样的,我们首先要判断递归的结束条件,当输入值n<10时,直接打印n,这就是递归的结束条件。使用非递归时,就是迭代(循环)。

2024-03-11 16:46:05 484 20

原创 C语言实战——扫雷游戏

再继续分析,我们在棋盘上布置了雷,棋盘上雷的信息(1)和非雷的信息(0),假设我们排查了某⼀个位置后,这个坐标处不是雷,这个坐标的周围有1个雷,那我们需要将排查出的雷的数量信息记录存储,并打印出来,作为排雷的重要参考信息的。那这个雷的个数信息存放在哪里呢?假设我们排查(8,6)这个坐标时,我们访问周围的⼀圈8个黄色位置,统计周围雷的个数时,最下面的三个坐标就会越界,为了防止越界,我们在设计的时候,给数组扩大一圈,雷还是布置在中间的9*9的坐标上,周围⼀圈不去布置雷就行,这样就解决了越界的问题。

2024-03-10 10:20:58 2501 22

原创 【C语言】:练手题

【代码】C语言之练手题。

2024-03-09 11:29:06 618 18

原创 找出单身狗1,2

思路:通过上面的题目,我们不难想到,如果我们可以把数组中的数据分离开,再分别进行异或,就可以找出那两个数字。

2024-03-08 20:37:42 858 20

原创 【C语言】: 快速排序——qsort函数的介绍

首先qsort是库函数,使用时要包含头文件。void* base:指针,指向的是待排序的数组的第一个元素size_t num:是base指向的待排序数组的元素个数size_t size:base指向的待排序数组的元素的大小int (* compar)(const void * p1 ,const void * p2):函数指针,指向的就是两个函数的比较函数(排序函数名)。待排序的数组,元素的个数,每个元素的大小都能看懂,不需要解释。那排序函数名是什么呢?排序函数。

2024-03-03 19:02:17 1084 22

原创 【C语言】:柔性数组和C/C++中程序内存区域划分

也许你从来没有听说过柔性数组这个概念,但是它确实是存在的。C99中,结构体中的最后⼀个元素允许是未知大小的数组,这就叫做柔性数组成员。int arr[];//柔性数组成员。

2024-03-01 21:16:15 647 13

原创 【C语言】:枚举和联合

enum Day //星期 {enum Sex //性别 {以上定义的enum Day,enum Sex都是枚举类型。{}大括号里的内容是枚举类型的可能取值,叫做枚举常量。这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。别漏了逗号。enum Day//星期Mon,Tues,Wed,Thur,Fri,Sta,Sunint main()return 0;输出结果:enum Sex//性别MALE=2,

2024-02-28 16:26:13 1167 10

原创 【C语言】:整型提升,算术转换与大小端的介绍

C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获取足够精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这个转换过程称为整型提升。//补码的16进制表示:0x00 00 00 14//补码的16进制表示:0xff ff ff f6return 0;我们对a和b进行内存监视:通过观察,我们可以发现,在内存中存储的a和b的补码是倒着存储的。这是为什么呢?大端【字节序】存储。

2024-02-27 20:59:00 922 10

原创 【C语言】:探索位段的秘密

位段的成员必须是int,unsigned int,或signed int。只要是整型家族都可以,如char)位段的成员名后面有一个冒号和一个数字。数字表示该成员所占空间的比特位的多少,并且不能超过该类型的大小。int _b : 5;A就是一个位段类型。那有人会产生疑问,int不是4个字节,32个比特位吗,怎么_a是2个比特位呢?int确实是32bit没错,但是:2的意思是_a不需要那么多的空间,只要分配2bit就可以啦。

2024-02-26 21:34:40 1166 8

原创 【C语言】:自定义类型:结构体的使用及其内存对齐

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。注意:例如描述一个学生:注意:上述代码没有创建变量,也没有初始化,只是声明了一个结构体类型,就像int,float一样,只是一种类型。接下来我们可以用结构体类型创建变量方式1:声明类型的同时创建,这是全局变量方式2:我们也可以在函数内部创建局部变量我们再对结构体变量进行初始化:方式1:直接初始化方式2:也可以再函数内部进行初始化当然,也有结构体的嵌套:我们也可以将其打印出来:打印结果:在声明结构的时候,可以不

2024-02-22 17:18:11 1084 12

原创 【C语言】:4大内存函数

参数类型与返回值类型都是void*,这是因为这个函数不仅可以拷贝字符串,也可以拷贝整型,浮点型等,所以需要泛型指针接收。(注:若想了解void* 指针的使用,请移步我的主页浏览文章《深入理解指针变量》)。函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。这个函数在遇到 ‘\0’ 的时候并不会停下来。如果source和destination有任何的重叠,复制的结果都是未定义的。注意:这个函数只负责拷贝两块独立空间的数据。

2024-02-19 16:33:30 1059 6

原创 【C语言】:10大字符串函数

要引头文件字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。参数指向的字符串必须要以 ‘\0’ 结束。注意:函数的返回值为size_t,是无符号的(易错源字符串必须以 ‘\0’ 结束。会将源字符串中的 ‘\0’ 拷贝到目标空间。目标空间必须足够大,以确保能存放源字符串。目标空间必须可变。返回值是指向目标字符串的第一个字符的地址。源字符串必须以 ‘\0’ 结束。

2024-02-18 23:06:55 977 6

空空如也

空空如也

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

TA关注的人

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