自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一文通关-----排序

排序在实际⽣活中随处可⻅,如购物软件中通过综合评分、评价、价格等排序商品⽅便筛选。再或 者⼤学综合实⼒排⾏榜,再或者华润富豪排⾏榜等等。

2026-11-03 22:09:44 350 21

原创 一文通关-----树和二叉树

二叉树(Binary Tree)是另一种树型结构,它的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于 2 的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒(二叉树是有序树),左边的叫左子树,右边的叫右子树。二叉树的度并不一定为 2,他要求每个结点度最大为 2,特殊情况下,树的度也可能为 0 或者 1。二叉树也是一个递归定义的数据结构,任何一棵二叉树可以分为根和左右子树。堆在存储结构是顺序存储(数组),逻辑上是⼀棵完全⼆叉树。⼩堆就是树中任意 双亲=孩⼦。

2026-11-01 17:00:30 444 21

原创 一文通关-----栈和队列

跟顺序表类似,栈的顺序存储实现可以使⽤静态数组,我们称为静态顺序栈,也可以使⽤堆上动态申 请数组实现,我们称为动态顺序栈。静态顺序栈的缺陷跟静态顺序表类似,只适⽤于确定知道最多需 要多少空间的场景,那么我们后续重点讲解动态数组实现的版本。int top;// 标记栈顶}Stack;// 指向栈数组空间的指针int top;// 栈顶位置// 容量}Stack;

2026-10-15 23:51:11 311 20

原创 贪吃蛇小游戏---古法编程

至此这个贪吃蛇小游戏就结束了,通过这个小游戏,我们可以对之前学过的知识进行一个比较全面的复习,同时我们也真正的应用上了链表,后续我还会出一期使用opencode,实现贪吃蛇小游戏,那个就比较精美了,我们这个使用的是简单的宽字符没够美观,但是基本实现了,小游戏的运行逻辑,如果你们需要完全的代码可以去我的GitHub上找完整代码。

2026-10-15 23:50:29 2302 29

原创 深入理解函数栈帧的创建与销毁——从汇编视角彻底搞懂函数调用

函数栈帧(stack frame)是函数调用过程中在调用栈(call stack)上开辟的一块连续空间。每次函数调用都会创建自己的栈帧,函数返回时销毁。函数参数(调用方压入的实参副本)返回地址(call 指令压入,告诉函数调用结束后回到哪里)上一层函数的 ebp(用于恢复调用方的栈帧)临时数据:非静态局部变量、编译器生成的临时变量被保存的寄存器(函数执行期间可能用到 ebx/esi/edi 等,需先保存原值以便返回时恢复)一个函数的栈帧 = 从它的 ebp 到它的 esp 之间的那块内存。;

2026-10-06 18:45:43 411 16

原创 双向循环链表

双向循环链表先看一眼单链表尾插的实现():想往末尾加一个元素,得从头开始一步步走到尾。链表有 n 个元素,这次插入就是 n 次指针跳转,O(n)。尾删()同理,也是 O(n)。单链表还有两个更硬的限制:这两个问题的根源是同一个:单链表的结点只知道"我后面是谁",不知道"我前面是谁",也不知道"我是不是最后一个"。解决办法是给每个结点装两个指针:(前驱)和 (后继)。再在前面加一个不存业务数据的头结点 L,然后把链表首尾接起来,形成一个环。关键点来了 —— 空的时候,L 的 prev 和 next 都指向

2026-10-02 13:33:54 457 22

原创 链表----单链表

我们前面讲链式存储的时候就是用的单链表的逻辑,单链表的结点又要存储值域又要存储下一个元素的地址。我们来一句句分析,第一个typedef为了能够适应数据类型的变化,第二个typedef是对结构体的重命名。我们就是通过这个结点指针类型来简单表示,并不是必要的,我们使用LNode*也是一样的,为了后续方便一点;结构体内部是一个简单存储数据的类型,其次就是结构体的一个自引用,我们自引用的时候,只能引用结构体指针,不能引用结构体变量。链表的自引用必须是同类型引用,我们这个自引用里面存放每个结点的地址。

2026-09-20 22:47:09 402 23

原创 顺序表小补充

我们将opencode用到实际的项目中,这样可以让我们能够更快的上手opencode,并且这里介绍了unit testing单元测试,我们以后在项目中都是要些unit testing 的我们这里可以提前使用了解一下。

2026-09-16 13:02:10 275 22

原创 线性表和顺序表

我们平常都是使用L来表示线性表,这里引进了一个新的概念------位序,我们要区分位序和下标之间的区别,下标是从0开始的,但是位序是从1开始的,很多书籍都将的位序,大家不要搞混了。线性表的表头没有前驱,表尾没有后继,这与我们之前的顺序储存很相似。1.2 线性表的两种实现方式线性表使用顺序存储的方式就是顺序表,使用链式存储的方式就是链表(下一节内容)。我们来回顾一下顺序存储和链式存储。

2026-09-13 14:17:00 304 19

原创 OpenCode使用指南

我们上次安装之后进行了简单的交互,我们知道opencode默认的使用模型是:但是当我们觉得这个模型不行,或者觉得这个模型不够用时,我们该怎么切换其他的模型呢?我们通过这个命令来唤醒选择列表回车之后,就会出现一些模型你选择之后,可能就会出现一些强度的推荐你选取的强度越高消耗的tokens也就越多,tokens消耗完了opencode就不会工作了。我们就只有等待tokens刷新了,或者切换一个有余量的接口继续使用。

2026-09-10 00:49:30 412 16

原创 OpenCode保姆级安装教程

开源 AI 编程代理(编程助手 / 编程智能体),它提供终端界面、桌面应用、网页端和 IDE 扩展等多种使用方式。它和 Claude Code、Cline、Gemini CLI 是同一类工具。

2026-09-08 00:21:57 806 18

原创 时间复杂度和空间复杂度

我们对程序的评价就是从时间和空间两个方面来评判的,计算机的空间是很大的,所以我们重点就要关注时间,我们常常需要使用空间来换时间,我们后续还需要勤加练习达到快速判断的水准。

2026-09-06 23:27:56 306 18

原创 数据结构的概念

这一篇文章主要还是介绍一下数据结构的基本概念以及数据结构的组成,本文的篇幅过长,但是这只是我们对数据结构的一个介绍,不用为此感到烦恼。

2026-08-28 15:12:35 382 23

原创 预处理详解

C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理阶段处理的。这个我们之前就讲过几遍了,现在再将最后一遍。我们常见的就是直接定义数字,但实际上还是有很多定义方式的,例如像typedef那样简化名称等等。使用define定义不用加;号这种定义方式可以大幅缩减我们的代码,我们看着是不是和typedef没有什么区别,但是他们两还是有区别的:使用define可以说是直接将文本给改了,使用typedef则只是再编译器层面给改了,但是实际上并没有改变文本。

2026-08-27 15:16:10 262 16

原创 编译和链接

编译和链接可以说是将程序的运行底层逻辑搞清了,编译器的运行过程也有了清楚的了解,我们还需好好想想从内存到文件到编译和链接这整个过程,这个过程对我们后续的学习还是很有帮助的。

2026-08-25 22:36:59 307 20

原创 一文吃透文件操作

磁盘(硬盘)上的文件就是文件。但是我们在程序设计中,一般分为两种文件:程序文件和数据文件。本文的函数较多,但是有很多功能相似,函数形态相似的,我们可以关联记忆,减轻负担,本文让我们从代码程序走到文件,这是一个漫长的过程,从流到文件的打开和关闭,再到文件的读写,这都是需要我们一步一步来的,内容较多,篇幅过长,还请细细体会。

2026-08-22 23:27:30 514 20

原创 动态内存管理

这一文还是很重要的,对于我们后续的数据结构的学习有很大的关系,我们数据结构就是围绕这内存展开的,这4个函数的使用还是很简单的,但是一定要注意释放动态内存。

2026-08-19 22:37:22 954 25

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

自定义类型中,包含前边学的结构体以及现在学的联合体和枚举,对于这三个枚举是使用最少的就是枚举,联合体也是一个重点,像联合体的应用就完全可以模拟C++中的类和对象,结构体是重重之重,我们后续的学习中也常有使用。

2026-08-17 17:55:53 256 22

原创 纯干货一文搞定结构体

我们来看一下位段的实际形态:位段中的_只是一种命名习惯,没有说位段一定要用_,位段中的“位”指的是bit位,位段后面的数字指的就是成员变量占的bit位,可以看到使用位段的方式大大减少了使用空间,这时候聪明的你,肯定会想到位段中的总共也就47个bit位啊,为什么占了8个字节?

2026-08-16 22:21:16 231 19

原创 数据在内存中的存储

其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分 为⼤端字节序存储和⼩端字节序存储。以上的这些概念需要牢记。通过一文的学习,我们对内存的存储有了深刻的体会,对于内存空间的大小以及不同类型的存储方式有了更清楚的认知,这其中的浮点数的存储是完全新的知识,也是罕见出现了公式,我们要勤加练习深度理解公式。

2026-08-13 22:14:18 336 23

原创 C语言中的内存函数

我们这一文与上一文字符函数和字符串函数有些点是相通的,函数名称也是有带你相似,我们完全可以一起记忆,方便发现其中的区别和使用环境,也方便思考其中的变化。

2026-08-12 23:56:19 457 20

原创 字符函数和字符串函数

字符函数和字符串函数这其中的函数有很多,我们并不是全都要记住,至少我讲的要记住,这其中有很多向关联的函数,很方便记忆,并且难度也很一般很好理解,我们下文再见!

2026-08-12 18:15:43 220 18

原创 指针习题讲解

回调函数就是⼀个通过函数指针调⽤的函数。如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调用的函数就是回调函数。我们来正常生成一个计算机程序来观察一下你会发现这其中有很多相似的步骤就比如每个case中的的语句,只是调用的函数不同而已,我们刚学了函数指针数组,这时你们就可能会想到利用函数指针数组来访问函数,回调函数就是函数指针的一种非常重要的应用,这里就会问了,不是函数指针数组吗?为什么说是函数指针呢?

2026-08-11 22:26:36 380 21

原创 深度理解指针3

指针是C语言中最大的一个板块,也是难度最高的板块,很多新手都是学到指针就开始打退堂鼓的,但是我相信你们既然能看到这里应该就有学下去的信心,如果学习过程中有不会的,及时留言,相信你们!

2026-08-03 22:36:59 483 23

原创 深度理解指针2

变量是可以修改的,如果把变量的地址交给⼀个指针变量,通过指针变量的也可以修改这个变量。 但是如果我们希望⼀个变量加上⼀些限制,不能被修改,怎么做呢?这就是const的作⽤。上述代码中n是不能被修改的,其实n本质是变量,只不过被const修饰后,在语法上加了限制,只要我 们在代码中对n就⾏修改,就不符合语法规则,就报错,致使没法直接修改n。如果我们直接通过地址来修改n的值呢?可以看到通过指针指向的地址,进行修改是可以修改成功的,虽然这违反了语法,但是确实是修改了值,用const修饰就是为了防止被修改,既然可以

2026-08-01 22:23:31 350 19

原创 深度理解指针1

这一章是C语言中最重要的,不知道有多少学生学到这里就没有信心继续学下去,可想而知,这章难度之大,指针就是C语言中的分水岭,也是难度的巅峰,接下来我们用一文来讲清楚C语言中的指针。

2026-07-31 23:32:45 376 14

原创 一文通关C语言中的操作符

操作符从更深程度了解了,内存的空间,对字节,bit位有了更深的体会,我们应该熟练bit位的变化,所带来的影响,这章所需要记忆的东西比较多,不理解还请多阅读几遍,或者留言私信,希望能帮助你们!

2026-07-27 18:00:24 247 15

原创 C语言---函数

并不是所有的情况的有适配的函数使用的,所以为了能够可以方便,所以我们就有了自定义函数。自定义函数与库函数都是差不多地,语法如下:真正地理解没有案例是不完美的。我们可以顺便温习一下前面学习的三目操作符,定义a和b,从键盘输入a和b的值,创建get_max函数用于返回两个数中的最大值,在调用的时候不想要返回值是就将 int 类型改成,void类型,在函数中,再用m来接收函数的返回值,注意这里接收的类型必须和函数的类型是一样的,再打印返回的值。

2026-07-25 22:47:11 563 26

原创 C语言---数组

数组是我们对内存一个很好的了解方式,一维数组和二维数组本质上都是一个储存元素的空间,我们对这个空间的使用方式和理解,是我们学好数组的关键,讲到这里相信大家已经有了深刻的体会,快去刷题体会一下吧!

2026-07-23 19:17:17 321 24

原创 头脑风暴---分支和循环

循环这是一个大模块,这是对逻辑能力的一次很好的锻炼,需要分清每种循环的特点,这样才能在遇到不同的条件下使用正确的循环逻辑;理清分支语句中的 if 语句,和 switch 语句所适用的场景;学到这里相信你已经学会了,快去刷题实践一下吧!

2026-07-22 23:52:54 234 22

原创 C语言的开端---数据类型和变量

我相信通过细致的讲解,对C语言有了大致的了解,C作为计算机语言,其中的数据类型和变量是新手入门的不二人选,我们想要学好任意一门计算机语言,数据类型与变量都是最好打基础的,从根本上了解了计算机语言的底层逻辑,输入,输出也是计算机执行程序的基础语法,虽然每种语言的输入和输出的函数有所不同,但是输入和输出函数都是新手必学的。

2026-07-21 16:13:12 461 29

原创 扫雷小游戏

在若干格子组成的矩阵中,含有一定数量的地雷,每次揭开格子,若有一次是地雷则游戏结束,直至所有没地雷的格子全部解开则游戏胜利。

2026-06-16 21:51:48 365 20

空空如也

空空如也

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

TA关注的人

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