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

原创 C++类和对象下篇

🐇🔥博客主页:云曦📋系列专栏:💨路漫漫其修远兮 吾将而求索。

2024-06-02 23:07:41 1012

原创 C++类和对象中篇

上期讲解到了C++一个类是如何定义的即对象的实例化等。这期将讲解类的六个默认成员函数及其实现一个日期类。

2024-05-08 23:38:16 1138

原创 C++类和对象上篇

哈喽!大家好呀,咱们又见面了。上期我们也是触摸到了C++的大门,那么这期我们就要开始慢慢的推开这扇大门了。也希望和大家一起坚持学习下去。//类体:由成员函数和成员变量组成 };class为定义类的关键字、className是这个类的名字、{}为类的主体、注意:{}后面的;不能省略。类体中的内容称为类的成员,类里的变量叫作成员变量、类里的函数叫作成员函数。类定义的两种方式:声明和定义都放在类内,但需要注意:在类里定义的成员函数有可能会被编译器当作内联函数处理。

2024-05-01 19:30:07 33

原创 C++入门篇

在学习C语言时,我们经过一个很漫长的过程。但也是终于学过来了,从现在开始我们就此碰到了C++的门,但还进不去,因为C++是在C的基础之上的进阶学习,这也是一个很漫长的路程等待我们走完。活多说了下面我们就开始C++的入门学习吧!我们在学习C语言时,是否有过在写代码时偶尔会出现你定义的变量名与某个头文件的函数名命名冲突了,就只能无奈的去把变量名改了。这个问题其实在我们日常练习代码时,很少见,但是在我们做项目时却是一个很常见的问题。为此C++语言为了解决这个问题,命名空间就此诞生。

2024-04-27 23:10:09 1044

原创 【数据结构】排序

🐇🔥博客主页:云曦📋系列专栏:数据结构 💨吾生也有涯,而知也无涯💛感谢大家👍点赞 😋关注📝评论文章目录前言一、排序的概念及运用二、常见排序算法的实现📙2.1 插入排序📓2.1.1 直接插入排序2.1.2 📓希尔排序📙2.2 选择排序📓2.2.1 直接选择排序📓2.2.2 堆排序📙2.3 交换排序📓2.3.1 冒泡排序📓2.3.2 快速排序📄2.3.2.1 hoare版本📄2.3.2.2 挖坑法📄2.3.2.3 前后指针版本📄2.3.2.4 快速排序(非递归实现)📙2.4 归并排序📓2.4.1

2023-10-06 18:47:25 1010 1

原创 【数据结构】二叉树链式结构补充和二叉树的顺序结构及实现

上一期讲到了二叉树的链式结构,但上一期的链式结构还差着几个接口没写,所以在这一期补上,然后就是二叉树的顺序结构讲解了,二叉树的顺序结构将会实现堆和堆排序,最后会用堆实现TOPK问题。

2023-10-01 19:54:55 369

原创 【数据结构】二叉树

在上期,讲解完栈和队列的实现后,本期迎来了新的知识,名为"二叉树",希望大家能坚持的学习下去。

2023-08-18 19:56:44 695 1

原创 【深入理解C语言】-- 关键字2

在上期我们学习了两个关键字,本期将继续深入理解另外的关键字。在static修饰函数时:提高了项目的维护、提供安全保证。总的来说:static是C语言为用户提供安全保证的一个关键字。sizeof是用来计算在空间占用的字节大小的一个操作符,且sizeof是一个操作符。

2023-08-16 18:22:10 213

原创 《C语言深度解剖》.pdf

💨吾生也有涯,而知也无涯。

2023-08-13 19:14:39 1280

原创 【深入理解C语言】-- 关键字1

本期为深入理解C语言的第一期,这期我们将会更深入的理解二个关键字一般在代码块 { } 内定义的变量,即是局部变量,默认都是auto修饰的,不过我们一般都是把auto省略掉的。注意:auto只能用来修饰局部变量。且局部变量、自动变量、临时变量都是一回事,一般统称为“局部变量”。我们先来看一下存储金字塔离CPU越近的存储单元,效率越高,单价成本越贵。离CPU越远的存储单元,效率越低,单价成本越便宜。register的用途就是尽量将所修饰的变量(注意:这里说的是尽量。

2023-08-09 20:48:07 62

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

在上期中我们把双向链表学完了,这期我们要开始新的一章“栈和队列”的讲解,栈和队列基本都是拿我们之前所学的顺序表或链表来实现,可谓是新瓶装旧酒,有了对顺序表和链表的认识,实现栈和队列并不是难事!

2023-08-08 18:10:19 260

原创 【数据结构】-- 带头双向循环链表

在上期我们学了单链表,但单链表有个缺点就是尾插尾删不方便,所以这期我们要学习到一个非常完美的链表:带头双向循环链表。至于有多完美大家看完就知道了。双链表含义其实就是每个节点可以找到前后的节点。带头双向循环链表注意:1. 链式结果只是在逻辑上是连续的,但在物理上就未必是连续的了。2. 链表的节点是从堆上申请的空间。3.从堆上申请的空间,可能是连续的也有可能不连续。

2023-08-04 17:27:00 48

原创 【数据结构】-- 单链表

*本章讲解的单链表为无哨兵卫的单链表(无头单链表)**

2023-08-01 22:54:02 53

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

静态顺序表的存储空间是有限的,满了就只能删除部分空间才能继续存储,所以在实现顺序表时一般不采用静态顺序表。pos位置插入x的思路:从pos位置到有效数据的个数位置,从后往前覆盖数据,最后把x覆盖到pos位置上。虽然时间复杂度为O(N),没二分查找的效率快,但没必要用二分查找,因为顺序表在查找元素这块用的很少.动态顺序表的空间满了,可以自动增容,所以通常实现顺序表时,用的都是动态开辟的。查找的含义为:在顺序表中查找某个元素,找到返回下标,没找到返回-1。头插的含义为:从数据的起始位置插入数据。

2023-07-27 22:17:02 107

原创 数据结构与算法的复杂度计算

函数中for循环执行了2 * N次,while执行了10次(可以忽略不计),那么使用大O表示法为O(2*N),根据推导方法3要将系数去掉,最后表示为O(N)本题是二分查找,最好的情况是1次找到,最坏的情况是O(logN)次找到,时间复杂度为O(logN),logN在算法里表示的是底数为2,对数为N.可以看出这是冒泡排序,最好的情况N次,最坏的情况为(N*(N+1))/2次,取最坏的情况,时间复杂度为O(N^2)函数中执行次数为M+N次,因为M和N都是未知数,所以时间复杂度为O(N+M)

2023-07-26 17:06:23 54

原创 程序环境和预处理详解

FILE进行编译源文件的路径LINE文件当前的行好DATE文件编译的日期TIME文件编译的时间STDC如果编译器遵循ANSI C, 那么值就是1,否则未定义可以发现VS2022并没有完全遵循ANSI C#define的后面可以是一个符号,也可以是字符串,或者是一段代码;FOR;return 0;100;FOR;return 0;for;;;FOR;return 0;for没有参数导致死循环了从这里可以看出#define其实就是替换。

2023-07-19 18:45:00 57

原创 如何用C语言操作文件

本篇章用到的所有库函数的头文件为:其实就是磁盘上的文件程序文件数据文件。

2023-07-16 21:55:00 77

原创 动态内存管理

为什么会有动态内存呢?0 };int a = 0;空间大小是固定的数组在声明的时候要指定大小,它所需要的内存在编译时分配.但动态内存不一样,动态内存可以自由申请空间大小,而且这个空间可以增加或缩小.动态内存函数的头文件是:<stdlib.h> 或<malloc.h>malloc和freemalloc和free库函数的搭配使用。

2023-07-15 19:31:26 36

原创 C语言进阶之自定义类型

结构体变量的定义int age;当然也可以用typedef给结构体起一个别名.给结构体起一个别名叫stu typedef struct stu {int age;} stu;结构体初始化int age;} s1 = {"张三" } , 20 };//这里初始化的话,为全局变量 int main() {"李四" } , 18 };//这里初始化的话,为局部变量 struct stu * p = & s2;

2023-07-14 10:11:17 40 1

原创 字符串、内存函数的使用及模拟实现库函数

返回值:指向 str1 中指定的整个字符序列在 str2 中首次出现的指针,如果序列在 str1 中不存在,则返回NULL指针。memmove的功能跟memcpy一样,但唯一不一样的是,memcpy不能自己拷贝自己,但memmove可以自己拷贝自己。memcpy虽然可以拷贝任何类型的元素,但不能自己拷贝自己,但memmove可以实现自己拷贝自己的效果。memcmp是用来比较任何类型的元素大小,比较的是任何类型元素的字节。strcpy的功能是,把源头的字符串拷贝到目标字符数组里.

2023-07-12 19:28:38 116 3

原创 进阶指针番外篇:指针和数组笔试题解析

数组名的意义:1.数组名单独放在sizeof(数组名)内部计算的是整个数组的大小2.&数组名取出的是整个数组的地址3.除此以外,碰到的所有数组名都是数组首元素的地址。

2023-07-10 15:08:53 79 4

原创 C语言之进阶指针

整型指针 - 是指针,存放的是整型的地址字符指针 - 是指针,存放的是字符型的地址指针数组 - 是数组,存放的是指针而数组指针其实就是指针,存放的是数组的地址接下来是数组指针的写法//*与pf结合,那么p是指针变量,指向一个数组,数组有10个元素 //每个元素的类型是int型 int(* pf) [ 10 ];//数组指针 - 是指针 - 指向一个数组 return 0;

2023-07-09 11:02:22 93 5

原创 用C语言模拟实现qsort库函数(采用冒泡排序实现)

从上图我们可以看出qsort是一个用来排序的库函数,跟冒泡排序一样排的是升序,但不同的是冒泡排序只能排序一种类型的元素,而qsort却可以排序多种不同类型的元素。了解完库函数的参数和返回值,我们来尝试使用qsort库函数实现整型和浮点型的排序.qsort库函数还可以排序char类型,单浮点型类型,还有结构体类型.最后我们用冒泡排序来模拟实现qsort库函数.

2023-07-01 17:34:19 54

原创 函数栈帧的创建和销毁

文章目录函数栈帧的创建和销毁分析完整板书相信大家在学习的过程中遇到了很多问题,比如:局部变量是怎么创建的?为什么局部变量的值是随机值?函数是怎么传参的?传参的顺序是怎么样的?形参和实参是什么关系?函数调用是怎么调用的?函数调用结束后是怎么返回的?这些问题等我分析完函数栈帧的创建和销毁后大家基本就清楚了.函数栈帧的创建和销毁分析注意:我这里用的是VS2013的编译器,在不同的编译器下查看函数栈帧是略有差异的,版本越高的编译器它的封装就越严谨,看到的函数创建和销毁就略有差异.在寄存器

2023-06-23 22:06:35 34 2

原创 牛客网BC78 筛选法求素数解析

本题要求的是用筛选法解,但我扩展了两种写法来跟筛选法对比效率和代码量.暴力求解法:只是把功能实现了,但在效率和代码量上分析出的结果是远远不如试除法和筛选法的.试除法:实现了功能,代码量也比暴力求解法少了,但一个一个数的试除效率依然很低.筛选法: 筛选法是我目前知道的所有方法里最优的方法.

2023-06-17 18:33:33 63

原创 浮点型在内存中的存储

一个变量使用什么类型存入内存就用什么类型取出,比如定义的int类型存入内存那么就用int类型取出,用浮点型存入内存就用浮点型取出.

2023-06-03 15:02:44 34

原创 模拟实现库函数strcpy

1.使用assert(防止别人使用时传入的是空指针)2,尽量使用const3.养成良好的代码风格4.增加必要的注释5.避免编码的陷阱。

2023-05-28 12:09:54 32

原创 C语言之初阶指针

以上是内存的布局,每个格子代表1个字节,如果想访问这些空间就先要对这些空间进行编号,0x00ff40就表示这个空间的编号,而在计算机内我们把这个编号也叫作地址,且访问这个内存空间需要指针去访问,所以 编号 == 地址 == 指针.注:指针在使用时也需要开辟空间,而这个空间的大小为:32位机器上是4字节,64位机器上是8字节.2.2 指针 ± 整数从上面的运行结果可以得出:指针的类型决定了指针向前或向后走多大距离.利用&(取地址)将a的地址取出放到int*类型的pi变量里,然后通过解引用符号(

2023-05-22 18:19:05 28

原创 扫雷游戏详解

在前面定义一个变量每排查完一次变量加1,之后用行和列相乘减去雷的数量,判断是否除了雷的地方,还有要排查的格子,如果有就不进去,没有就提示玩家排雷成功.布置雷给mine数组,布置前我们可以在game.c文件定义雷的数量,之后要改雷的数量就好改些.(布置的雷用’1’显示)可以从以上图片看出扫雷游戏的规则是:如果排查到雷游戏结束,没排查到那么就显示周围8个坐标是否有雷,有多少个雷。当然如果我们要改雷的数量不定义一个宏定义是要改很多地方的,而宏定义我们只需要改一个地方其他地方就会跟着改变.

2023-05-14 16:14:32 134 3

原创 C语言之三子棋小游戏

我们定义两个数x和y来接收玩家要选择的坐标,在C语言里数组的下标是从0开始的,但如果给外行人玩的话他是不会知道数组下标是从0开始的,所以玩家输入后我们判断x和y是否大于1小于行和列如果是那么就进去,不是那么就提醒玩家输入的坐标不正确。,是就返回三个棋子的其中一个其中,然后在test.c里定义一个变量来接收返回值,最后看返回的是*号还是#号,*号就代表玩家赢,#号就代表电脑赢。:平局判断的话,我们定义一个函数,用这个函数来判断棋盘里是否还有空格,有空格就返回0,没空格就返回1,然后在判断输赢的函数里判断。

2023-05-13 19:42:11 125 5

原创 C语言之数组的总结及冒泡排序算法

数组名通常情况下就是数组的首元素地址,但有两个例外:1,sizeof(数组名);//数组名单独放在sizeof()内部,表示整个数组的大小.2,&数组名,这里的数组是取出整个数组,计算的是这个数组的大小.除以上两个例外后其他的数组名都是数组的首元素地址.

2023-05-13 00:00:35 292 1

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

1,汉诺塔问题就是利用C和B柱子把n-1的盘子移到B柱子上,然后把A剩余的盘子移到C,最后利用递归把B柱子和A柱子把B柱子上的盘子移到C柱子上。2,青蛙跳台阶问题就是斐波那契数列的问题第3个数等于前两个数的和,也就是n个台阶有(n-1)+(n-2)个跳法。

2023-05-03 12:51:12 76 1

原创 C语言函数的认识

C语言把经常用到的功能进行了封装,封装成了一个个的函数,提供出来给大家都可以使用,这类封装完的函数就称为“库函数”。比如:这类的函数就是库函数(注:使用库函数时必须添加对应的头文件)自定义函数和库函数大致一样,有函数名,有返回类型和函数参数,唯一不一样的是库函数是一件封装好了的,自定义函数是有我们自己设计出来的,这样就给了程序员很大的发挥空间。//语句项 } //void - 返回类型 //function - 函数名 //int x - 函数参数举个例子:两个数的最大值x : y;

2023-05-01 16:04:54 41 1

原创 二分查找算法

当我们在一个有序数组里寻找某一个元素时,是怎样寻找的哪。在不知道二分查找算法的情况下,通常是用一个循环来查找数组里的某一个元素,但这样寻找效率就显的很低。二分查找(也称折半查找算法):原理是算出中间的数然后判断是否大于或小于想要寻找的元素,小于则取消对小于中间的元素部分,大于则取消对大于中间的元素部分。定义完后 开始实现折半的功能,中间数 = (左下标 + 右下标)/ 2;算出中间数后我们用if判断arr[mid] 是否大于,小于或等于要查找的数等于:就输出找到了;

2023-04-21 22:57:39 43 1

原创 C语言之初步认识指针及指针变量和指针变量的大小

在认识指针之前,我们先来了解指针是干什么的。其实指针就像生活中一栋楼每个房间的门牌号,一栋楼如果没有门牌号想找到你要找到的房间是很难找到的。想对指针了解的到位就必须先知道计算机上的东西是如何在内存里储存的。计算机上是有多根地址线的,一根地址线会传入高低电平的信号,在传入计算机里之前会把这个高低电平的信号转换为数字信号1/0。(每根地址线传入的数字信号表示一个bit位)计算机里的32位/64位说的就是地址线,32位的机器上是有32根地址线的,64位的机器是自然是64根地址线。

2023-04-15 21:04:13 134 2

原创 牛客网BC55 判断闰年

是闰年输出"yes"否则输出"no"判断一个整数n是否是闰年。

2023-04-11 21:41:34 56 1

原创 关键字typedef的作用及static修饰变量

关键字typedef的作用及static修饰变量

2023-04-10 23:29:19 110 2

原创 变量的作用域以及生命周期是怎样创建和销毁的

变量的作用域以及生命周期是怎样创建和销毁的

2023-04-09 00:05:41 235 3

原创 初入学习编程的自述

https://www.yuque.com/g/yuqueyonghu0jusal/pm2lsc/yq4gyno1kypcuyyd/collaborator/join?token=J9OJYYY6OSvzjFJS#

2023-04-07 19:03:15 92 2

空空如也

空空如也

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

TA关注的人

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