- 博客(69)
- 资源 (1)
- 收藏
- 关注
原创 04.【数据结构-C语言】贪吃蛇项目实现(控制台显示、Win32 API、游戏设计与分析、核心逻辑分析及代码实现)
摘要 本文详细介绍了使用C语言在Windows控制台环境下实现经典贪吃蛇游戏的全过程。项目通过Win32 API控制台操作、宽字符处理和链表数据结构等技术,实现了贪吃蛇的基本功能:方向控制、食物生成、蛇身增长、碰撞检测、得分计算等。文章分为游戏设计、技术实现和代码分析三部分,重点讲解了控制台坐标处理、宽字符显示、蛇身链表管理、游戏状态机等核心模块的实现方法,并提供了完整的代码示例。该项目可作为C语言学习者的综合编程实践案例,涵盖了函数、结构体、指针、内存管理等多项基础知识的应用。
2025-08-06 20:52:22
777
原创 03.【数据结构-C语言】链表(链表概念;链表分类: 单链表、双向链表;单链表实现;带头循环双向链表实现;链表常见题目解析)
数据结构-C语言链表。主要内容包括:1)链表的概念和结构特点,物理非连续但逻辑连续;2)单链表和双向循环链表的实现方法,包括节点结构、插入删除操作和指针使用;3)链表与顺序表的优缺点比较,链表在插入删除效率上有优势;4)链表相关算法题目解析,涉及反转、合并、分割等操作。文章通过代码示例详细说明了链表的实现原理和操作方法,为数据结构学习提供了实用参考。
2025-08-06 20:50:51
556
原创 02.【数据结构-C语言】顺序表(线性表概念、顺序表实现:增删查、前向声明、顺序表实现通讯录项目:增删改查、通讯录数据导入及保存到本地文件)
数据结构-C语言顺序表实现,通讯录项目实现:线性表概念;顺序表概念及分类,顺序表实现;使用顺序表实现通讯录项目:前向声明的概念及使用规则,通讯录的增删改查、通讯录数据的保存到本地文件、本地文件数据导入到通讯录中。
2025-08-06 18:40:54
387
原创 19.【C语言学习笔记】预处理详解(#define宏定义、#和##运算符、#undef移除宏定义、条件编译、头文件包含“”和<>、避免重复包含头文件#ifndef)
C语言与定义符号;#define定义常量、#define定义宏;带有副作用的宏参数;宏替换规则;宏和函数的对比;#和##运算符;宏定义的命名约定;#undef移除一个宏定义;命令行定义;条件编译;头文件包含用“”还是<>,避免重复包含#ifndef
2025-07-30 11:44:42
951
原创 18.【C语言学习笔记】编译和链接(翻译环境(源代码转换为机器指令);编译:预处理(预编译),编译,汇编;链接;运行环境(实际执行代码))
C语言翻译环境和运行环境介绍;编译分解:预处理(预编译)(生成.i后缀文件)-> 编译(生成.s后缀文件) -> 汇编(生成.o后缀文件);链接生成.exe后缀文件(可执行文件)。
2025-07-28 20:06:11
833
原创 17.【C语言学习笔记】文件操作(文件的打开和关闭、流和标准流、顺序读写、随机读写、判断读取结束的原因、文件缓冲区)
C语言文件操作:文件的类别(程序文件、数据文件);二进制文件和文本文件;流和标准流;文件的打开和关闭;文件的顺序读写;文件的随机读写;文件读取结束的的判定(已经读取结束,判断结束的原因);文件缓冲区
2025-07-28 20:02:21
1055
原创 16.【C语言学习笔记】动态内存管理(malloc、free、calloc、realloc、柔性数组)
C语言动态内存管理:malloc动态内存开辟;free动态内存释放;calloc动态内存开辟并初始化;realloc动态内存调整;动态内存常见的错误;柔性数组的概念及使用、优势;C/C++中程序内存区域划分。
2025-07-27 19:14:58
801
原创 15.【C语言学习笔记】联合体&枚举(联合体声明、特点、使用;枚举类型声明、优点、使用)
C语言联合体类型介绍:成员变量共用一块内存空间,所以也叫共用体,特点是可以节省空间;枚举类型的介绍,声明、优点、使用。
2025-07-26 14:10:20
852
原创 13.【C语言学习笔记】内存函数(memcpy内存拷贝、memcmp内存比较等)和数据在内存中的存储(整数,浮点数在内存中的存储,大小端字节序)
C语言内存函数的使用及模拟实现,memcpy、memmove、memset、memcmp,可以处理非字符串类型的数据,头文件string.h;整数在内存中的存储,大小端字节序(有练习进行解析);浮点数在内存中的存储,存过程,取过程,存储方法,主要是S、M、E三个数据。
2025-07-26 14:09:41
616
原创 12.【C语言学习笔记】字符函数和字符串函数(strlen获取字符串长度、strcpy拷贝、strcat拼接、strcmp比较、strstr查找、strtok分割、strerror、perror)
C语言字符函数(字符分类、字符转换)的使用;字符串函数:strlen(获取长度);strcpy(拷贝);strcat(拼接);strcmp(比较);strncpy(指定个数拷贝);strncat;strncmp;strstr(字符串查找);strtok(指定字符分割);strerror(错误信息获取);perror(错误信息打印)
2025-07-24 14:18:14
876
原创 11.【C语言学习笔记】指针(三)(回调函数、qsort排序函数、sizeof关键字和strlen函数)
C语言回调函数简介;qsort函数的使用;冒泡实现qsort函数;sizeof和strlen解释使用及对比;数组和指针笔试题解析
2025-07-22 17:04:02
732
原创 10.【C语言学习笔记】指针(二)(数组名理解、指针访问数组、数组传参的本质、typedef、数组指针、函数指针)
C语言 1.数组名的理解(数组首元素的地址,sizeof(arr)和&arr代表整个数组);2.使用指针访问数组;3.一维数组传参的本质(传递数组首元素的地址);4.二级指针变量(指针的指针);5.指针数组(是数组);6.数组指针(指向数组的指针);7.二维数组传参的本质(传递第一行这个一维数组的地址);8.字符指针变量(常量字符串不能修改);9.函数指针变量(存放函数的地址)、typedef关键字的使用;10.函数指针数组—转移表的使用。
2025-06-30 19:04:19
683
原创 09.【C语言学习笔记】指针(一)(内存和地址、&、*操作符、void*、const修饰、指针运算、野指针、assert断言、指针传址调用)
C语言1.内存和地址的关系,指针==地址;2.指针变量=>存放地址的变量,取地址操作符&和解引用*操作符的使用,指针变量的大小和操作系统32、64位有关;3.指针变量类型的意义,+-整数,void*指针的用处;4.const修饰指针(在*前/后);5.指针运算(+-整数、指针-指针);6.野指针;7.assert断言(可以#define NDEBUG直接取消所有断言);8.指针传址调用;
2025-06-24 20:17:01
1128
原创 08.【C语言学习笔记】操作符(进制转换、原反补码、各种操作符、优先级,结合性、表达式求值)
C语言操作符的分类;2、8、10、16进制之间的相互转换;原码、反码、补码之间的相互转换;、移位操作符的使用;位运算操作符的使用;单目操作符;逗号表达式;下标访问[]、函数调用()操作符的使用;操作符的属性:优先级、结合性;表达式求值:整型提升、算术转换、问题表达式的解析。
2025-06-24 12:07:55
918
原创 04.【Qt开发】内存泄漏解释(对象树概念)、乱码问题解释及修改
本文主要介绍了Qt中的对象树机制和字符编码问题。对象树是Qt管理内存的核心机制,通过parent指针建立父子关系,父对象销毁时会自动销毁所有子对象。文章通过示例说明在堆上创建对象并指定parent的重要性,避免内存泄漏和重复析构问题。同时分析了乱码问题的成因,指出编码方式不匹配是根本原因,对比了GBK和UTF-8编码的区别,并推荐使用qDebug()替代cout来避免乱码。最后总结了QLabel使用、对象树机制、自定义控件扩展和字符编码处理等关键知识点,强调在Qt开发中应遵循对象树规范和正确使用调试工具。
2025-06-23 19:11:46
857
原创 07.【C语言学习笔记】函数递归
C语言递归的概念,递归的限制条件(限制条件非常重要,递归必须有限制条件和逼近条件,不然递归无法完成);递归举例1:求n的阶层;递归举例2:顺序打印一个整数的额每一位;递归与迭代:递归简单清晰,迭代占用资源少但是代码可能繁琐;迭代举例3:求第n个斐波那契数(青蛙跳台问题其实就是斐波那契数问题)
2025-06-23 08:36:08
807
原创 06.【C语言学习笔记】函数(函数概念、库函数、实参和形参、return注意事项、数组做函数参数、static和extern)
C语言函数的概念(函数也叫子程序);库函数的网址;自定义函数的语法形式;实参和形参及其关系的解释;return 语句的注意事项;数组做函数参数的规则;函数的链式访问(printf函数返回的是打印在屏幕上的字符的个数);函数的定义和声明:static 和 extern 关键字修饰变量和函数的作用。
2025-06-23 08:35:06
1040
原创 04.【C语言学习笔记】数组(数组类型、初始化、[ ]操作符、变长数组、windows中的延时函数)
C语言数组元素的类型、数组类型(两者不同);数组的初始化(不完全初始化、完全初始化);下标引用操作符[];一维数组在内存中的存储/二维数组在内存中的存储(顺序存储)、计算数组元素的个数(sizeof);二维数组的初始化;变长数组的概念及使用;Windows中的延时函数、清空cmd窗口的命令
2025-06-17 21:50:34
877
原创 03.【C语言学习笔记】分支和循环(else悬空问题、条件操作符、switch、continue、goto、rand随机数生成)
C语言else的悬空问题;关系操作符(比较运算符);条件操作符(三目操作符);逗号表达式;逻辑操作符(&&、||、! 与或非);switch语句:switch、case、break、default;continue;break;goto跳转语句;随机数的生成(rand、srand、time函数的作用及使用、指定范围的随机数生成公式)
2025-06-17 21:49:43
977
原创 02.【C语言学习笔记】C语言数据类型和变量(sizeof使用、signed和unsigned、全局和局部变量及存放位置、强制类型转换、scanf、printf)
C语言各种数据类型的列举;signed和unsigned;数据类型的取值范围(各种数据类型的最大最小值宏定义);全局变量和局部变量及存放位置;算数运算符;赋值运算符;单目运算符;强制类型转换的作用;printf占位符列举、怎样限定宽度、怎样显示正负号打印、怎样限定小数位数、怎样输出部分字符串(限定字符串输出位数);scanf的返回值、scanf连续输入的使用,占位符,赋值忽略符,
2025-06-16 22:06:41
949
原创 01.【C语言学习笔记】C语言常见概念(VS使用技巧、关键字、ASCII码表、转义字符、语句分类、注释)
C语言学习笔记(不容易记住的知识点)C语言介绍;VS的使用技巧(设置字体、快捷键、调试、查找函数定义、正常使用scanf);printf的含义(占位符、限定宽度、显示正负号、限定小数位数、输出部分字符串);关键字介绍展示;ASCll编码表;转义字符;语句和语句分类(空语句、表达式语句、函数调用语句、复合语句、控制语句);注释 /**/ 不支持嵌套注释
2025-06-16 22:03:28
377
原创 21.【C++11】(“{}”列表初始化、右值引用和移动语义、引用折叠和完美转发)
C++11引入了多项关键特性。在列表初始化方面,C++11统一了初始化方式,支持内置类型和自定义类型的{}初始化,并引入std::initializer_list支持容器初始化。右值引用和移动语义是核心改进,通过区分左值/右值、左值引用/右值引用,实现了资源的高效转移。文章详细解析了移动构造/移动赋值的实现原理,及其在传值返回和容器操作中的应用场景。此外,还探讨了完美转发机制,通过引用折叠和forward模板保持参数原始类型属性。这些特性共同提升了C++的性能表现和代码简洁性
2025-05-31 18:59:21
586
原创 03.【Qt开发】Qt新建初始代码介绍、实现界面打印helloworld
本文介绍了Qt应用程序开发的基础知识,包括项目结构、编译过程和两种实现"Hello World"的方式。主要内容涵盖:1. Qt项目文件结构(.pro文件配置说明,头文件和源文件组织);2. QApplication核心类的作用。两种实现“helloworld”的方法:1. 图形化界面设计方法;2. 纯代码实现控件创建。
2025-05-29 17:05:11
1057
原创 02.【Qt开发】Qt Creator介绍及新建项目流程
本文详细介绍了Qt Creator集成开发环境的使用方法。第一部分讲解了如何创建桌面快捷方式,并详细说明了Qt Creator的界面布局和功能模块,包括菜单栏、模式选择、构建套件选择器等8个主要组成部分。第二部分重点介绍了新建项目的完整流程:从模板选择到项目配置,详细说明了location、构建系统、Details、Translation等步骤的设置要点。文章还对编辑界面的各个功能区域进行了说明,包括左边栏的文件管理、代码编辑区的导航功能、UI设计界面的组件拖放以及构建区的运行调试选项。
2025-05-27 19:13:01
1529
原创 20.【C++进阶】用哈希表封装myunordered_map和myunordered_set
本文分析了哈希表的实现框架,并模拟实现unordered_map和unordered_set。模拟实现中,通过HashTable模板类复用哈希表功能,分别定义MapKeyOfT和SetKeyOfT仿函数来提取键值。迭代器实现采用单链表思路,难点在于operator++处理跨桶遍历。最终实现的unordered_map支持[]操作符,通过修改insert返回pair<iterator,bool>实现。
2025-05-27 17:15:00
897
原创 19.【C++进阶】unordered_map和unordered_set的使用、哈希表的实现
本文主要介绍了哈希表及其实现方式。首先分析了unordered_set和unordered_map与set/map的差异,包括key要求、迭代器特性和性能比较。随后详细讲解了哈希表的核心概念,包括哈希函数设计(除法散列、乘法散列、全域散列等)、哈希冲突处理方法(开放定址法和链地址法)。重点实现了两种冲突解决方案:线性探测的开放定址法和哈希桶的链地址法,并讨论了扩容策略、负载因子控制等关键技术点。文章还探讨了key类型转换、字符串特化等实际问题,为理解和实现高效哈希容器提供了完整的技术路线。
2025-05-26 17:22:55
1154
原创 18.【C++进阶】封装红黑树实现mymap和myset
本文分析了map和set的源码实现,重点探讨了其核心框架和红黑树(rb_tree)的泛型设计。map和set通过红黑树实现,map存储键值对,set仅存储键。文章还讨论了红黑树的插入、删除和查找操作,并指出源码中命名风格的不一致性。接着,文章模拟实现了map和set,复用了红黑树框架,并通过仿函数解决了插入时的比较问题。最后,文章详细介绍了迭代器的实现,包括++和--操作符的逻辑,并展示了如何通过红黑树实现map的[]操作符。整体上,文章通过源码分析和模拟实现,深入探讨了map和set的底层实现机制。
2025-05-26 17:21:41
595
原创 17.【C++进阶】红黑树实现(二叉搜索树,通过对任何一条从根到叶子的路径上各个结点的颜色进行约束)
红黑树是一种自平衡的二叉搜索树,通过在每个节点上增加颜色标记(红色或黑色)并遵循特定规则,确保树的高度平衡。其核心规则包括:根节点为黑色、红色节点的子节点必须为黑色、从任一节点到其子节点的路径上黑色节点数量相同。这些规则保证了红黑树的最长路径不超过最短路径的两倍,从而维持近似平衡。红黑树的插入操作通过变色和旋转(单旋或双旋)来维护平衡,时间复杂度为O(log n)。与AVL树相比,红黑树的平衡要求较为宽松,旋转次数较少,适合频繁插入和删除的场景。红黑树广泛应用于C++ STL中的map和set等容器。
2025-05-23 12:16:46
1031
原创 16.【C++进阶】AVL树的实现(自平衡二叉查找树,通过控制高度差去控制平衡)
文章讲述了AVL树,AVL树是一种自平衡二叉搜索树。其核心特性是左右子树的高度差绝对值不超过1,通过平衡因子(右子树高度减左子树高度)来维护平衡。AVL树的高度控制在logN,使得增删查改操作的时间复杂度为O(logN),相比普通二叉搜索树有显著提升。插入操作时,按二叉搜索树规则插入后,更新路径上的平衡因子,若出现不平衡则通过旋转(左旋、右旋、左右双旋、右左双旋)恢复平衡。AVL树的查找与普通二叉搜索树相同,效率为O(logN)。以及AVL树的实现
2025-05-23 12:11:24
727
原创 01.【Qt开发】Qt介绍及Qt开发环境搭建(2025.05最新下载方式)
Qt简介(发展史、支持的平台、版本、优点及应用场景的介绍);Qt SDK安装流程-2025.05最新版官方下载安装流程,包括步骤的详细注释说明。
2025-05-22 18:34:29
1982
2
原创 结课作业自选01. 内核空间 MPU6050 体感鼠标驱动程序(二)(完整实现流程)
本文介绍了基于MPU6050传感器的体感鼠标驱动程序的实现流程。代码通过I2C总线与MPU6050通信,读取加速度数据并转换为鼠标位移,同时支持按键检测功能。主要流程包括:模块加载时自动注册I2C驱动,设备树匹配成功后执行探测函数mpu_mouse_probe,初始化设备并启动定时器。定时器到期后触发回调函数timer_callback,调度工作队列处理函数accel_work_handler,读取加速度数据并应用低通滤波,最终通过虚拟鼠标控制实现体感功能。代码还包含GPIO初始化、按键去抖动等细节处理。
2025-05-22 08:29:29
944
原创 结课作业自选01. 内核空间 MPU6050 体感鼠标驱动程序(一)
1. linux嵌入式系统内核介绍,内核程序的编写,包括必要的流程和函数。2. 几个内核驱动的示例:内核获取gpio状态,内核控制led灯,内核实现mpu6050体感鼠标。包括实现流程、代码详解、函数解释、执行指令等。
2025-05-22 08:28:53
666
原创 结课作业03. 混杂设备驱动led流水灯实现
本文介绍了如何在Linux内核中编写一个混杂设备驱动程序(gpios-misc-drv.c),控制3个LED灯。该驱动程序通过写入/读出3个字节来设定和读取3个GPIO引脚的电平状态,每个字节代表一个引脚。驱动程序加载后会自动生成/dev/gpio-misc设备节点。文章详细描述了驱动程序的实现流程,包括模块初始化、GPIO引脚配置、混杂设备注册、文件操作结构体定义以及read和write函数的实现。此外,还提供了一个应用程序(gpios-misc-app)的伪代码,展示了通过调用驱动程序实现流水灯效果。
2025-05-21 15:45:04
995
原创 结课作业01. 用户空间 MPU6050 体感鼠标驱动程序
linux开发板通过uinput创建虚拟鼠标,通过mpu6050的加速度数据控制体感鼠标移动,使用开发板的按键模拟鼠标左右键,包括功能实现流程、函数详解及源代码。完成虚拟体感鼠标功能实现。
2025-05-21 15:41:37
1430
原创 15.【C++进阶】map和set的使用(关联式容器)
文章介绍了C++ STL中的序列式容器和关联式容器,重点讲解了set和map系列的使用。set用于存储唯一键值,map用于存储键值对,两者都支持迭代器遍历和自定义比较函数。multiset和multimap则允许键值重复。文章还详细介绍了set和map的构造、增删查操作,以及如何使用迭代器和[]操作符进行数据修改。最后,通过示例代码展示了如何利用map统计水果出现次数,并对比了multimap与map的差异。
2025-05-20 10:12:21
778
原创 03. Linux嵌入式系统学习笔记(三)(用户空间驱动程序练习:体感光标实现mpu+i2c+framebuffer)
本文章讲解了linux嵌入式开发板的四个实例:1.shell脚本实现流水灯。2.i2c接收mpu6050的数据并转换成加速度打印。3.framebuffer在屏幕映射虚拟内存,操作虚拟内存在频幕上打印光标。4.根据2和3实现体感光标可控制。
2025-05-12 09:00:00
593
原创 0X. Linux嵌入式系统(课堂笔记)
虚拟机linux与开发板通过usb连接;通过网络将虚拟机和开发板进行桥接并实现文件的拷贝提取等操作,在开发板实现白屏、按键使用等案例
2025-05-08 16:19:48
814
原创 14.【C++进阶】二叉搜索树(二叉搜索树的增、删、差及代码实现,key_value的概念及实现)
C++二叉搜索树(BST)是一种有序二叉树,左子树的值≤根节点,右子树的值≥根节点,支持高效查找、插入和删除。理想情况下时间复杂度为O(logN),但若退化为单支树则降至O(N)。插入和查找通过值比较定位位置;删除分四种情况处理,双子节点时采用替换法。文档提供了C++实现代码,并区分了纯Key搜索(如车牌识别)和Key/Value搜索(如字典翻译)的应用场景。由于BST可能不平衡,需进一步学习AVL树或红黑树来优化性能。
2025-04-21 09:09:41
827
原创 13.【C++进阶】多态(多态的定义、概念及实现,虚函数和抽象类)
C++的多态机制,包括编译时多态(如函数重载)和运行时多态(通过虚函数实现)。运行时多态需满足两个条件:基类指针或引用调用虚函数,且派生类重写该虚函数。文件详细解析了虚函数表、动态绑定与静态绑定的区别,以及纯虚函数和抽象类的作用。此外,还介绍了协变、析构函数重写、override和final关键字,并通过代码示例说明多态的实现原理和应用场景。
2025-04-14 09:48:26
831
原创 12.【C++进阶】继承(继承的概念和使用、基类成员的访问、作用域、虚继承)
C++继承的概念和使用、继承基类成员的访问方式的变化、继承类模板;基类和派生类的作用域、隐藏规则;派生类的默认成员函数;继承与友元、继承与静态成员;多继承、虚继承、菱形继承;继承和组合的介绍及代码示例。
2025-04-07 18:33:00
1086
贪吃蛇项目-C语言实现代码
2025-08-04
双向链表-C语言实现代码
2025-08-03
单链表-C语言实现代码
2025-08-02
C++stack(栈)、queue(队列)、priority-queue(堆)的模拟实现
2025-03-03
C++list的模拟实现
2025-02-27
C++日期类的实现,包括日期+,+=,-,-=和>,<,>=,<=,==,!= ;日期 - 日期 得天数 ;流提取>>,流插入<< 运算符重载等
2025-02-15
C++vector的模拟实现
2025-02-25
C++string类的模拟实现
2025-02-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人