自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++模板(初阶)

对于模板函数的使用,

2024-09-24 20:02:15 875 2

原创 C/C++内存分布

new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数class Apublic:: _a(a)~A()private:int _a;int main()// 只申请空间// 申请空间+构造函数// 只释放空间free(p1);// 析构函数 + 释放空间delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;// 只申请空间。

2024-09-18 22:42:36 1617 4

原创 C++类和对象(3)

一、赋值运算符重载1.1 运算符重载1.2 赋值运算符重载1.3 日期类实现Date.hDate.c++test.cpp。

2024-09-03 22:40:45 1024 1

原创 C++类和对象(2)

我们不写,编译器默认⽣成的构造,对内置类型成员变量的初始化没有要求,也就是说是是否初始化是不确定的,看编译器。对于⾃定义类型成员变量,要求调⽤这个成员变量的默认构造函数初始化。如果这个成员变量,没有默认构造函数,那么就会报错,我们要初始化这个成员变量,需要⽤初始化列表才能解决,初始化列表,我们下个章节再细细讲解。说明:C++把类型分成内置类型(基本类型)和⾃定义类型。内置类型就是语⾔提供的原⽣数据类型,

2024-09-02 16:14:55 928 1

原创 C++ 类和对象(1)

class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者 m开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是。

2024-08-08 21:15:48 715 7

原创 C++入门

/变量int Add(int x, int y) //函数struct MyNode //类型int a;int main()// 这⾥默认是访问的是全局的rand函数指针// 这⾥指定hao命名空间中的randreturn 0;int main()// 这⾥默认是访问的是全局的rand函数指针// 这⾥指定bit命名空间中的randreturn 0;}ST;assert(ps);......

2024-08-03 00:41:38 1029 8

原创 数据结构(二叉树-2)

前序遍历(Preorder Traversal 亦称先序遍历):访问根结点的操作发⽣在遍历其左右⼦树之前。中序遍历(Inorder Traversal):访问根结点的操作发⽣在遍历其左右⼦树之中(间)后序遍历(Postorder Traversal):访问根结点的操作发⽣在遍历其左右⼦树之后。在上述构建好的二叉树中,如果要对其进行层序遍历的话,期待输出的结果为 1 2 3 4 ,访问顺序为:根结点、左⼦树、右⼦树。访问顺序为:左⼦树、根结点、右⼦树。访问顺序为:左⼦树、右⼦树、根结点。

2024-07-23 17:18:42 1310 6

原创 数据结构(二叉树-1)

树是⼀种⾮线性的数据结构,它是由nn>=0) 个有限结点组成⼀个具有层次关系的集合。把它叫做 树是因为它看起来像⼀棵倒挂的树,也就是说它是根朝上,⽽叶朝下的。有⼀个特殊的结点,称为根结点,根结点没有前驱结点。除根结点外,其余结点被分成M(M>0)个互不相交的集合T1T2……Tm,其中每⼀个集合⼜是⼀棵结构与树类似的⼦树。每棵⼦树的根结点有且只有⼀个前驱,可以有0个或多个后继。因此,树是递归定义的。树形结构中,⼦树之间不能有交集,否则就不是树形结构。

2024-07-20 17:53:51 1150 7

原创 数据结构(队列)

这么看好像两者的差别不大,但是我们在单链表结构中可以稍作改造,直接定义两个结点(头结点,尾结点)指向原链表的队头和队尾,那么在队尾入数据时就不用遍历链表,直接让尾结点->next 等于新结点,时间复杂度就变成 O(1)了。概念:只允许在⼀端进⾏插⼊数据操作,在另⼀端进⾏删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)⼊队列操作的时间复杂度为 O(1) ,进行出队列操作的时间复杂度为 O(n);⼊队列:进⾏插⼊操作的⼀端称为队尾。出队列:进⾏删除操作的⼀端称为队头。

2024-07-19 23:22:40 600 2

原创 数据结构(栈)

栈:⼀种特殊的线性表,其只允许在固定的⼀端进⾏插⼊和删除元素操作。进⾏数据插⼊和删除操作的⼀端称为栈顶,另⼀端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插⼊操作叫做进栈/压栈/⼊栈,⼊数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。栈的实现⼀般可以使⽤数组或者链表实现,相对⽽⾔数组的结构实现更优⼀些。因为数组在尾上插⼊数据的代价⽐较⼩。一般使用数组作为栈的底层结构对栈的出栈压栈更方便)

2024-07-18 17:41:00 376 5

原创 数据结构(单链表算法题)

(注意:在判断 n3 时要注意他是否已经跳出链表了,因为 n3 是移动的最快的,如果已经跳出链表就不能进行 ->next 操作)(注意:while 中的(fast && fast->next)顺序不能更改,当 fast 已经为空时,如果改成。(fast->next && fast),条件会先按顺序执行 fast->next ,从而报错)以此类推,当 n2 为 NULL 时跳出循环,此时 n1 指向的结点就是链表的新的头结点。当 fast =NULL。

2024-07-18 00:54:19 1104 6

原创 数据结构(初阶3.单链表)

一、单链表1.1概念与结构1.2结点1.3链表的性质1.4链表的打印二、实现单链表SList.hSList.c申请新节点尾插头插尾删头删在指定位置之前插入数据在指定位置之后插入数据删除指定位置结点删除指定位置之后的结点销毁结点test.c。

2024-07-14 01:31:01 720 5

原创 数据结构(初阶2.顺序表)

一、线性表二、顺序表2.1 概念和结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表2.3动态顺序表的实现打印顺序表初始化销毁增容尾插头插在指定位置之前插入数据尾删头删在指定位置删除数据3.test.c。

2024-07-09 23:53:15 840 6

原创 数据结构(初阶1.复杂度)

算法在编写成可执⾏程序后,运⾏时需要耗费时间资源和空间(内存)资源。因此衡量⼀个算法的好坏,⼀般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。时间复杂度主要衡量⼀个算法的运⾏快慢,⽽空间复杂度主要衡量⼀个算法运⾏所需要的额外空间。在计算 机发展的早期,计算机的存储容量很⼩。所以对空间复杂度很是在乎。但是经过计算机⾏业的迅速发展,计算机的存储容量已经达到了很⾼的程度。所以我们如今已经不需要再特别关注⼀个算法的空间复杂度。

2024-07-09 13:05:36 1201 4

原创 文件操作.

磁盘(硬盘)上的⽂件是⽂件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)。2.1 程序文件程序⽂件包括源程序⽂件(后缀为.c),⽬标⽂件(windows环境后缀为.obj),可执⾏程(windows环境后缀为.exe)。2.2 数据文件⽂件的内容不⼀定是程序,⽽是程序运⾏时读写的数据,⽐如程序运⾏需要从中读取数据的⽂件,或者输出内容的⽂件。在以前各章所处理数据的输⼊输出都是以终端为对象的,即从终端的键盘输⼊数据,运⾏结果显⽰到显⽰器上。

2024-06-13 14:15:44 1171 7

原创 动态内存管理

一、动态内存分配二、malloc和free三、calloc 和 realloc3.1 calloc四、常见的动态内存错误4.1 对 NUll指针的解引用操作4.2 对动态开辟空间的越界访问4.3 对非动态开辟内存使用free释放4.4 使用 free 释放一块动态开辟内存的一部分4.5 对同一块动态内存多次释放4.6 动态开辟内存忘记释放(内存泄漏)五、柔性数组5.1柔性数组5.2 柔性数组的使用六、总结C/C++中程序内存区域划分。

2024-06-12 16:13:01 1390 8

原创 自定义类型:联合和枚举

联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。联合体的特点是所有成员共用同一块内存空间。所以联合体也叫:共用体。输出的结果为:4。

2024-06-11 19:07:42 481 6

原创 自定义类型:结构体

位段的声明和结构是类似的,有两个不同:1.位段的成员必须是int或signed int,在C99中位段成员的类型也可以选择其他类型。2.位段的成员名后边有⼀个冒号和⼀个数字。int _b:5;int _c:10;int _d:30;A就是⼀个位段类型。

2024-06-05 16:05:12 905 4

原创 数据在内存中的存储

大端字节序存储:将一个数据的低位字节内容存放在内存的高地址处,高位字节的内容存放在低地址处;小端字节序存储:将一个数据的低位字节内容存放在内存的低地址处,高位字节的内容存放在高地址处;

2024-05-30 16:30:16 847 4

原创 C语言内存函数

函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。memmove和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。如果source和destination有任何的重叠,复制的结果都是未定义的。memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。如果源空间和⽬标空间出现重叠,就得使⽤memmove函数处理。⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节。的时候并不会停下来。

2024-05-27 14:47:13 1124 3

原创 字符函数和字符串函数(2)

一、strstr的使用和实现二、strtok函数的使用三、strerror函数的使用。

2024-05-22 16:00:44 950 4

原创 字符函数和字符串函数(1)

如果source 指向的字符串的⻓度⼩于num的时候,只会将字符串中到 \0 的内容追加到destination指向的字符串末尾。通过返回值来说明是否是⼩写字⺟,如果是⼩写字⺟就返回⾮0的整数,如果不是⼩写字⺟,则返回 0。样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。如果源字符串的⻓度⼩于num,则拷⻉完源字符串之后,在⽬标的后边追加0,直到num个。C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字。

2024-05-20 16:33:56 889 4

原创 轻松拿下指针(6)

sizeofstrlen1.sizeof是操作符2.sizeof计算操作数所占内存的⼤⼩,单位是字节3.不关注内存中存放什么数据1.strlen是库函数,使⽤需要包含头⽂ 件string.h2.srtlen是求字符串⻓度的,统计的是\0之前字符的个数3.关注内存中是否有\0,如果没有\0,就会持续往后找,可能会越界指针完结~~~

2024-05-17 15:00:13 561 3

原创 轻松拿下指针(5)

因为 switch 语句的代码,只有调⽤函数的逻辑是有差异的,我们可以把调⽤的函数的地址以参数的形式传递过去,使⽤函数指针接收,函数指针指向什么函数就调⽤什么函数,这⾥其实使⽤的就是回调函数的功能。第指针(4)中我们写的计算机的实现的代码中 switch 语句代码是重复出现的,其中虽然执⾏计算的逻辑是区别的,但是输⼊输出操作是冗余的,有没有办法,简化⼀些呢?3.base指向的数组中一个元素的大小,单位是字节,但是我们不清楚将来的数据类型是什么,所以我们可以用宽度 width 接收;

2024-05-14 18:31:09 1295 4

原创 轻松拿下指针(4)

我们知道,变量有地址,数组也有地址,那么函数是否有地址呢?//整型指针变量//parr 是数组指针变量//arr &arr//&函数名和函数名都是函数的地址,没有区别return 0;如果我们要将函数的地址存放起来,就得创建函数指针变量咯,函数指针变量的写法其实和数组指针⾮常类似。int main()//pf 函数指针变量//pf 函数指针变量//pf 函数指针变量//int (*)(int,int) 函数指针类型。

2024-05-12 23:51:59 1363 1

原创 杨辉三角的打印

在屏幕上打印。

2024-05-09 22:51:03 663

原创 杨氏矩阵查找算法

杨氏矩阵查找算法

2024-05-08 17:48:00 433 1

原创 轻松拿下指针(3)

但是有两个例外:(1)sizeof(数组名):这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节;(2)&数组名:这里的数组名也表示整个数组,取出的是整个数组的地址。我们会发现arr和&arr{0}是类型是int*,+1会跳过四个字节,在十六进制中c=12,所以12-8=4;但是&arr的地址却跳过了40,整个数组的大小(7*16*2+2*16 - 6*16*2+15*16+8*16*0=40);到这里大家应该对数组名的意义有一定的了解了。

2024-05-07 21:54:51 1157 3

原创 分支和循环(2)

通过对分支和循环(1)的学习,我们就可以写一些比较有趣的代码了,下面我们来做一个猜数字游戏。

2024-05-06 18:31:31 892 1

原创 分支和循环(1)

C语⾔是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构,C语言是能够实现这三种结构的,其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种结构的组合。#我们可以使用ifswitch实现分⽀结构,使用forwhiledo while实现循环结构。

2024-05-04 21:04:16 1006 1

原创 轻松拿下指针(2)

2024-05-02 23:08:52 1234 3

原创 轻松拿下指针(1)

以上就是对指针一个初步的认识,往后我们会更加深入地对指针进行学习了解。

2024-05-01 00:00:14 1015 1

原创 C、函数递归

有时候,递归函数思路能解决很多复杂的问题,但是也会引入一些问题,有时候就得想其他办法,通常就是迭代的方式(通常就是循环的方式),事实上,我们看到许多问题是以递归的形式进行解释的,这是因为它比非递归的形式更加清晰,但是这些问题的迭代实现往往比递归实现效率更高。所以灵活使用递归或迭代的方式编写函数代码会更加高效的解决问题。

2024-04-29 23:07:06 838 1

原创 表达式求值—

总结,我们在写代码的时候,建议不要写出上述这些类似的复杂代码,虽然有操作符的优先级和结合性,但是计算路径可能在不同换件下得到的结果不易i当时自己想要的,存在潜在的风险!3.但是进入判断,sizeof(i)求 i类型大小的值是4,但是sizeof的返回值类型实际为无符号整形,因此编译器会自动将左侧i自动转换为无符号整形的数据;如果某个操作符的各个操作数属于不同的类型,那么除⾮其中⼀个操作数的转换为另⼀个操作数的类型,否则操作就⽆法进⾏。C语⾔中整型算术运算总是⾄少以缺省(默认)整型类型的精度来进⾏的。

2024-04-27 23:25:28 536 1

原创 扫雷的简单实现

1. 首先创建一个game.h来定义扫雷相关的函数和一个game.c来实现扫雷相关的函数;再创建一个test.c来测试整个游戏的运行情况2. #首先需要一个九乘九的扫雷棋盘用来设置雷的情况和显示雷将要分布的情况,为了方便统计和显示,我们可以创建两个二维字符数组来实现(注意:如果棋盘的大小为9*9,那么数组的大小就为11*11,避免在排查雷的过程中出现越界的情况);

2024-04-24 01:01:03 831 3

空空如也

空空如也

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

TA关注的人

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