- 博客(57)
- 收藏
- 关注
原创 C++初阶:list
(1)这里的list迭代器的实现不再是简单的原生指针,而是对原生指针进行了一层封装,使它更符合迭代器的行为(2)这里多加两个模板参数,主要是 * -> 两个操作符重载访问Node里面的内容。如果调的是const_iterator,那么返回的就是const指针(const修饰指针指向的内容不可修改)或引用如果调用普通的iterator,返回普通指针或引用。(3)这样通过模板编译器其实还是会生成两个类,减少了重复的代码(4)list的迭代器不是随机迭代器,而是双向迭代器。
2024-08-08 22:04:04
601
22
原创 C++初阶:vector
vector和我们之前学的顺序表的结构是差不多的,用一个动态开辟的数组来储存管理数据。vector的底层和顺序表有点区别。(后续会讲到)
2024-08-02 13:34:52
836
5
原创 C++初阶:string
C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列 的库函数,但是这些库函数与字符串是分离开的,不太符合OOP:面向对象编程(Object-Oriented Programming,简称OOP)的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。
2024-07-27 00:01:45
661
13
原创 C++初阶:动态内存管理
1. 栈(stack)又叫堆栈--非静态局部变量/函数参数/返回值(数据,地址)等等,栈是向下增长的。2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口 创建共享共享内存,做进程间通信。3. 堆(heap)用于程序运行时动态内存分配,堆是可以上增长的。4. 数据段(静态区)--存储全局数据和静态数据,程序结束后由系统释放。5. 代码段--可执行的函数(类成员函数和全局函数)二进制代码/只读常量。
2024-07-21 22:29:44
693
10
原创 C++初阶:类和对象(三)
初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成 员列表,每个"成员变量"后⾯跟⼀个放在括号中的初始值或表达式。
2024-07-18 22:12:02
867
11
原创 C++初阶:类和对象(二)
默认成员函数就是用户没有显式实现,编译器会⾃动⽣成的成员函数称为默认成员函数。⼀个类,我们不写的情况下编译器会默认⽣成以下6个默认成员函数
2024-07-15 17:08:08
957
13
原创 C++初阶:从C过渡到C++的入门基础
定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不再冲突了。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所以有了域隔离,名字冲突就解决了。
2024-07-09 00:11:05
831
13
原创 数据结构_手撕八大排序(计数,快排,归并,堆排,希尔,选择,插入,冒泡)
排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。function/数据结构-排序算法 · 钦某/c-language-learning - 码云 - 开源中国 (gitee.com) O(n^2) 希尔排
2024-06-05 00:24:43
1443
22
原创 数据结构_链式二叉树(Chained binary tree)基础
1. 前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点的操作发生在遍历其左右子树之前。2. 中序遍历(Inorder Traversal)——访问根结点的操作发生在遍历其左右子树之中(间)。3. 后序遍历(Postorder Traversal)——访问根结点的操作发生在遍历其左右子树之后。
2024-05-25 19:03:42
1003
12
原创 LeetCode_栈和队列(Stacks & queues)相关OJ
将mystack结构体里面创建两个队列q1、q2。创建两个栈st1、st2一个int*指针、一个head、一个tail、一个k表示队列容量。
2024-05-13 20:02:56
850
21
原创 数据结构_栈和队列(Stack & Queue)
栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则;队列具有先进先出FIFO(First In First Out)的原则。
2024-05-09 22:49:51
1023
20
原创 Leetcode_相交链表
让A链表从头遍历,当pA为空时,pA = headB;B链表从头遍历,当pB为空时,pB= headA。让每个链表都走完两个链表的路程,最后它们一定会在相交节点处相遇
2024-04-24 12:39:46
678
9
原创 数据结构_时间复杂度(Time complexity)
时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。
2024-04-21 19:30:25
969
13
原创 C语言结课实战项目_贪吃蛇小游戏
游戏状态:方便判断蛇的状态:(1)正常(2)撞墙(3)撞到自己(4)正常退出每一次while循环后判断游戏状态。食物指针:从开发角度来说,其实食物也是蛇的一个节点,当蛇头的下一个位置为食物时,将食物的节点头插到蛇身上面。反之变长,食物权重减少。遍历蛇身链表,若坐标重合,将蛇的状态改为KILL_BY_SELF,并且跳出循环。创建下一位置的节点,也是头插,但是在打印蛇身之后,将蛇尾位置打印两个空格。先将新节点头插进蛇身,打印蛇身在屏幕上,总分数加上食物权重。(这里也是有范围的,食物权重不能为负数,也不能过大)
2024-04-19 12:31:42
1737
28
原创 LeetCode_1304.和为零的 N 个不同整数
将arr[left]和arr[right]分别赋上相反的数,将left++,right--。以left
2024-04-16 09:19:59
316
5
原创 LeetCode_丑数
由题,我们知道丑数大于0,丑数都可以写成2*2*...*2*3*3...*3*5*5...*5,有了这个基础就很好写代码了。用三个while循环将前面的2 3 5全部除掉如果这个数是丑数,最后n是等于1的,反之n不等于1。
2024-04-15 18:27:06
290
2
原创 数据结构_带头双向循环链表
相较于之前的顺序表和单向链表,双向链表的逻辑结构稍微复杂一些,但是在实现各种接口的时候是很简单的。因为不用找尾,写起来会舒服一点。(也可能是因为最近一直在写这个的原因)
2024-04-13 23:30:14
324
2
原创 数据结构_非常方便的链表
链表是线性表的一种,是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。和顺序表差不多,用结构体定义一个节点,包括存储的数据和下一个节点的地址。这里我们写几个接口:尾插,头插,尾删,头删,查找元素,指定位置插入,指定位置删除,销毁。
2024-04-09 22:22:44
454
1
原创 数据结构_基于顺序表的通讯录
在顺序表的基础上,新定义一个(personinfo)结构体,将这个结构体作为顺序表的数据类型,存储在顺序表中。通过顺序表的基本接口实现personinfo的增删查改。
2024-04-08 14:46:14
271
原创 LeetCode_从数量最多的堆取走礼物[2558]
我们可以用一个函数sqrt来实现,在VS中包含math.h头文件就可以使用此函数了。之后我们要得出数组中最大值的下标,定义一个max=0,用for循环遍历数组,如果数组里面的数大于max,将这个数赋给max、并且记录下标。for循环完成后我们就可以得到最大数的下标了。先说说我自己的解法。看到题目描述我就觉得要用递归,我们可以先来一个if语句界定终止递归的条件,就是k==0的时候。我们把这时候gifts指针指向的数组求和并返回。官方解法是用的堆,这里我还没学到,等我学到后面再来更新把。
2024-04-07 00:21:39
352
1
原创 C语言程序编译和链接
在ANSIC的任何⼀种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执⾏的机器指令(⼆进制指令)。第2种是执⾏环境,它⽤于实际执⾏代码。
2024-03-30 16:44:45
930
原创 程序员的35岁危机
当我们觉得一个工作不能让我们学习到新事物,而却让我们在不断做着机械化重复的操作的时候,我们应当考虑换个环境,或者换个工作。如若不然我们就和在流水线上打螺丝是一样的(这里只是做个比喻,没有其他意思),随着年龄的增长,长久如此,我们自然会被新人淘汰。因此不断学习,拥有自己的核心竞争力,才是不被新人替代的关键。35岁被认为是程序员职业生涯的分水岭,许多程序员开始担忧自己的职业发展是否会受到年龄的限制。我也是一个还在IT学习之路上的奋斗者,我将保持坚持和积累,并且不断尝试新的知识和技术,不断地提高自己。
2024-03-30 15:55:33
262
原创 C语言中的文件和文件操作
函数名功能适⽤于fgetc字符输⼊函数所有输⼊流fputc字符输出函数所有输出流fgets⽂本⾏输⼊函数所有输⼊流fputs⽂本⾏输出函数所有输出流fscanf格式化输⼊函数所有输⼊流fprintf格式化输出函数所有输出流fread⼆进制输⼊⽂件fwrite⼆进制输出⽂件上⾯说的适⽤于所有输⼊流⼀般指适⽤于标准输⼊流和其他输⼊流(如⽂件输⼊流);所有输出流⼀般指适⽤于标准输出流和其他输出流(如⽂件输出流)。
2024-03-30 00:41:36
855
原创 AT89C52项目:DS18B20温度报警器
单总线只需要一根通信线即可实现数据的双向传输,当采用寄生供电(由通信线提供电压,主机配一个强上拉电路)时还可以省去VDD线路,此时,供电加通信只需要两根线。接收一位:主机将总线拉低1~15us,然后释放总线,并在拉低后15us内读取总线电平(尽量贴近15us的末尾),读取为低电平则为接收0,读取为高电平则为接收1,整个时间片应大于60us。初始化:主机将总线拉低至少480us然后释放总线,等待15~60us后,从机会拉低总线60~240us响应主机,之后从机释放总线。这样我们就实现了开头视频的全部功能了。
2024-03-25 16:28:36
1072
原创 C语言指针从进阶到精通
字符指针变量这里的两段代码很多人以为是吧字符串hello world放在了cp里面,但是事实是将字符串首字母的地址放在cp里面。这⾥str3和str4指向的是⼀个同⼀个常量字符串。C/C++会把常量字符串存储到单独的⼀个内存区域,当⼏个指针指向同⼀个字符串的时候,他们实际会指向同⼀块内存。但是⽤相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。所以str1和str2不同,str3和str4相同。
2024-03-23 23:12:11
882
原创 C语言中动态内存相关的4个函数free、malloc、calloc、realloc,常⻅的动态内存的错误
有时会我们发现过去申请的空间太⼩了,有时候我们⼜会觉得申请的空间过⼤了,那为了合理的分配内存,我们⼀定会对内存的⼤⼩做灵活的调整。如果参数 size 为0,malloc的⾏为是标准是未定义的,取决于编译器(在VS2022上malloc会象征性的给你一个地址,当你访问这个地址的时候就会造成越界访问)这时编译器会在内存的另一块空间开辟size大小的地址,并将原空间的数据拷贝到新空间,返回新空间的起始地址。• 如果参数 ptr 指向的空间不是动态开辟的,那free函数的⾏为是未定义的。size 调整之后新⼤⼩。
2024-03-23 00:45:06
698
原创 C语言结构体类型,结构体变量的创建和初始化,结构中存在的内存对齐
位段的声明和结构是类似的,有两个不同:1. 位段的成员必须是 int、unsigned int 或signed int ,在C99中位段成员的类型也可以选择其他类型。2. 位段的成员名后边有⼀个冒号和⼀个数字struct Aint _a : 2;int _b : 5;int main()//输出 8。
2024-03-19 23:22:47
867
原创 有关整数和浮点数在内存中存储
其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为⼤端字节序存储和⼩端字节序存储,下⾯是具体的概念:⼤端(存储)模式:是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存在内存的低地址处。⼩端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处。
2024-03-17 15:27:30
823
原创 C语言字符函数strncpy,strncat,strstr,strtok,strerror内存函数memcpy,memove,memset,memcmp详解||模拟实现
⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节(和strcmp差不多,memcmp可以比较任何内容)。memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。
2024-03-15 22:24:23
469
原创 51单片机LED8*8点阵显示坤坤跳舞打篮球画面
我们作为一名合格的 ikun,专业的小黑子,必须学会这个重要的知识。先看效果:51LED点阵_鸡你太美。
2024-03-15 19:14:44
3252
10
原创 C语言指针从基础到进阶
还记得上一篇博客出现了这么一段关于用指针访问数组的代码。这里用&arr[0]拿到了数组首元素的地址,但其实数组名在大部分情况下本来就是首元素的地址关于详细情况可以在我的另一篇博客了解:C语言中关于数组名什么情况为首元素地址,什么情况为整个数组的地址的问题。-CSDN博客但是&arr和&arr+1相差40个字节,这就是因为&arr是数组的地址,+1操作是跳过整个数组的。这⾥我们发现&arr[0]和&arr[0]+1相差4个字节,arr和arr+1相差4个字节,是因为&arr[0]和arr都是。
2024-03-10 23:56:12
981
1
原创 C语言中关于数组名什么情况为首元素地址,什么情况为整个数组的地址的问题。
但是&arr和&arr+1相差40个字节,这就是因为&arr是数组的地址,+1操作是跳过整个数组的。这⾥我们发现&arr[0]和&arr[0]+1相差4个字节,arr和arr+1相差4个字节,是因为&arr[0]和arr都是。• &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素的地址是有区别的)• sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表示整个数组,计算的是整个数组的⼤⼩,除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。
2024-03-10 23:22:16
456
1
原创 C语言指针从入门到基础详解(非常详细)
我们知道电脑中的CPU在处理数据的时候需要在内存中读取数据处理后的数据也会放在内存中。把内存划分为一个个的内存单元每个单元的大小是一个字节。每个字节都有它对应的编号也就是它的地址,以便CPU可以快速的找到一个内存空间。C语言中我们把地址叫做指针,所以。
2024-03-09 18:23:28
1057
1
基于C语言开发的《贪吃蛇双人版》小游戏
2024-04-28
基于C语言开发的贪吃蛇小游戏
2024-04-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人