自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 普通二叉树

二叉树是一种树形数据结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。每个节点包含一个值,并且可能有一个指向其左子节点和右子节点的指针(引用)。二叉树具有以下特性:1.根节点(Root): 树的顶部节点,没有父节点。2.节点(Node): 树中的每个元素。3.父节点(Parent): 一个节点的直接上级节点。4.子节点(Child): 一个节点的直接下级节点,分为左子节点和右子节点。5.叶节点(Leaf): 没有子节点的节点称为叶节点或叶子。

2024-05-21 16:08:56 472 1

原创 应用层协议【HTTP和HTTPS】

也可以是基于软件的,譬如维基百科用到的就是Nginx。那采用HTTPS后,到底会多用多少服务器资源,2010年1月Gmail切换到完全使用HTTPS, 前端处理SSL机器的CPU负荷增加不超过1%,每个连接的内存消耗少于20KB,网络流量增加少于2%,由于Gmail应该是使用N台服务器分布式处理,所以CPU负荷的数据并不具有太多的参考意义,每个连接内存消耗和网络流量数据有参考意义,这篇文章中还列出了单核每秒大概处理1500次握手(针对1024-bit 的 RSA),这个数据很有参考意义。

2024-05-16 11:09:31 1129 5

原创 树形数据结构---堆

我们能够看得出来这是一个大堆,这颗像树一样的图是它的逻辑结构,而底下的数组是它的物理结构,也就是说,我们真正操作的是数组。堆的特点是每个节点都满足堆的性质,即父节点的键值总是大于或等于(小于或等于)任何一个子节点的键值。堆分为最大堆和最小堆两种类型,其中最大堆的根节点键值是所有节点中最大的,最小堆的根节点键值是所有节点中最小的。堆在计算机科学中有着广泛的应用场景,其中最常见的应用之一是优先队列。5. **堆在操作系统中的应用**:堆内存管理是操作系统中的一个重要部分,用于动态分配内存给进程。

2024-05-09 18:22:20 984

原创 二叉树的(前,中,后序)遍历

7. **二叉搜索树(Binary Search Tree)**:二叉搜索树是一种特殊的二叉树,其中每个节点的值大于其左子树中的所有节点的值,且小于其右子树中的所有节点的值。9. **完全二叉树(Complete Binary Tree)**:对于深度为d的二叉树,除了第d层之外,其他层的节点都必须是满的,并且第d层的节点从左到右填入,称为完全二叉树。这些子节点分别称为左子节点和右子节点。叶子节点的高度为0。1. **根节点(Root)**:二叉树的顶端节点称为根节点,它没有父节点,是树的起始点。

2024-04-22 10:29:56 1330 1

原创 【游戏专区】贪吃蛇

Windows 这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外, 它同时也是⼀个很⼤ 的服务中⼼,调⽤这个服务中⼼的各种服务(每⼀种服务就是⼀个函数),可以帮应⽤程序达到开启 视窗、描绘图形、使⽤周边设备等⽬的,由于这些函数服务的对象是应⽤程序(Application), 所以便 称之为 Application Programming Interface,简称 API 函数。7. **分数计算**:游戏通常会记录玩家的得分,得分的计算方式可以是蛇吃到食物的数量,也可以是蛇移动的步数等。

2024-04-19 14:35:13 909 1

原创 【游戏专区】飞机大战

想想我们飞机需要哪些结构,坐标,血量还有什么呢//创建飞机结构int x;//飞机坐标int y;bool isDie;//是否健在int width;//宽度int height;//长度int frame;//当前帧int hp;//血量int type;//敌机类型}Plane;有了飞机的结构以及初始化,我们是不是还需要将其加载进入飞机图片。

2024-04-17 17:34:10 1026 4

原创 C语言【编译和链接】

在包含头文件的时候,我们有很大的可能会对同一个头文件,进行多次包含,在预编译的时候将你所包含的头文件全部替换成文本,给代码的编译,链接等增加不必要的负担。至于这些符号具体在项目中有没有用,很有用,你完全可以用它们去找到你的程序具体在哪个代码,哪一行出现了问题,并且很多大型项目中,都会用它写一个名叫日志系统的模块。链接:链接器将目标文件与其他必要的库文件进行链接,生成最终的可执行程序。注意:宏只是将内容替换,很可能因为你在定义宏的时候没有明确给出括号,而导致运行的结果和你期待的结果完全不同。

2024-04-05 15:54:31 420 4

原创 【文件操作API的使用】

在很多编程语言中,文件操作符被用于打开、关闭、读取和写入文件,以及对文件进行其他操作。读取文件时,文件操作符会根据指定的位置读取特定数量的数据,并将数据传递给程序进行处理。:使用文件操作符可以打开一个文件,使得程序能够访问文件的内容。:除了读取文件外,文件操作符也可以用于向文件中写入数据。:在文件使用完毕后,应该及时关闭文件,释放文件相关的资源。而在Python等高级语言中,文件操作符则可能是通过内置的文件对象来实现的。在不同的编程语言和操作系统中,文件操作符的具体实现方式可能会有所不同。

2024-04-02 16:49:23 485 4

原创 cJSON(API的详细使用教程)

JSON 对象是一个无序的键值对集合,键值对之间使用冒号 `:` 分隔,不同键值对之间使用逗号 `,` 分隔,整个对象使用花括号 `{}` 包围。- 每个键值对由一个键(key)和一个值(value)组成,中间使用冒号 `:` 分隔,不同键值对之间使用逗号 `,` 分隔。- JSON 字符串是以双引号 `"` 包围的文本序列,可以包含任意字符,包括转义字符(如 `\n` 表示换行)。- JSON 数组是一个有序的值的集合,值之间使用逗号 `,` 分隔,整个数组使用方括号 `[]` 包围。

2024-04-01 13:28:27 1181 3

原创 C语言(结构体,联合体,枚举的讲解)

灵活性:宏定义可以定义更复杂的常量,如带参数的宏、条件编译等,具有更大的灵活性。无类型约束:宏定义不受类型限制,可以用于定义任何类型的常量,包括字符串、表达式等。

2024-03-25 13:59:45 1081 2

原创 深入了解C语言中浮点数的存储方式

总的来说,浮点数和整数在内存中存储的区别主要在于数据类型、存储方式、精度和范围上的不同。- 浮点数的范围和精度受到单精度(float)和双精度(double)表示的限制,一般可以表示较大或较小的数值,但是精度会随着数值大小的增加而减少。根据IEEE 754标准,浮点数的存储方式使得计算机能够以近似的方式表示和处理实数,但也因此带来了一些浮点数精度上的限制和问题,比如舍入误差和表示范围。- 浮点数采用IEEE 754标准定义的格式进行存储,包括符号位、指数位和尾数位,以实现对小数的表示和计算。

2024-03-21 17:44:40 520 1

原创 C语言(字符串函数的模拟实现)

1.strlen1.1 用法我们模拟实现第一步是不是应该先了解它的用法呢strlen是 C 语言标准库中的一个函数,用于计算字符串的长度(即字符个数)。它的原型定义在头文件string.h中。下面是strlen其中,str是需要计算长度的字符串,返回值是size_t类型,表示字符串的长度。strlen函数会从字符串的开头开始遍历,直到遇到字符串结束符\0才停止,并返回遍历过程中统计的字符个数(不包括结束符)。1.2 模拟实现然我们来验证一下呗。

2024-03-18 17:31:20 895 1

原创 [高并发网络通信架构]实现tcp的高并发服务端

I/O多路复用(IO Multiplexing)是一种并发编程技术,用于同时监视多个I/O事件并选择就绪的事件进行处理。它可以通过一个线程或进程同时处理多个I/O操作,而不需要为每个I/O操作创建一个独立的线程或进程。I/O多路复用可以提高系统的并发性能,减少资源的消耗。在传统的编程模型中,每个I/O操作通常都需要一个独立的线程或进程来处理。这种方式在面对大量的并发连接时,会导致系统资源的浪费和性能下降。

2024-03-15 16:46:50 1324 1

原创 嵌入式sqlite3库API的使用

还记得我们上期讲了什么吗,没错,我们上期讲到了sqlite的使用,通过对比sqlite3和MySQL进一步了解了sqlite的使用场景,然后我们也讲了如何通过在linux终端执行命令行的方式去操作数据库增,删,改,查。我想大家应该对其有了一定的了解,今天我们来了解如何通过代码的方式去实现它的,增,删,改,查。我们通过这个函数,以及上一期我们讲到的在linux终端执行的SQL命令行就已经可以实现其增,删,改,查了。首先,我们想去操作数据库,就必须去打开它,才能进行下一步操作,当我们结束之后,是不是应该。

2024-03-13 15:53:20 368

原创 嵌入式sqlite3库的使用

1. **性能受限:** 对于大规模数据或高并发环境(高并发是指系统在同一时间内接收并处理大量的并发请求,对于数据库而言,高并发意味着大量的并发读写操作),SQLite 的性能可能不如其他专业的数据库系统。当然这些我们都可以不用特意的记,用到的时候可以搜索。说人话呢,就是你将数据存入数据库,就像你的钱存入银行,会更加的安全,高效,能够快速查询余额,也能够存储更久的时间。*到这里,我们通过命令操控终端去增,删,改,查数据库已经完成了,那我们怎么通过代码的方式去实现呢,话说贪多嚼不烂,我们下期再见。

2024-03-13 11:05:29 976

原创 C语言“巨简单”——指针

那么再想一下,你的好朋友住在这栋楼里面,你要去找他玩,你能通过什么去确认他的房间,然后找到他呢,没错,就是房间号。例如,如果你有一个指向数组开头的指针,你可以使用指针加上一个偏移量来访问数组中的元素,这个偏移量将会与指针的大小相乘。这么说吧,数组能做的事情,我指针基本都能做,数组不能做的事情,我指针依旧可以做,这就是我。没想到吧,指针也是可以进行算术运算的,不过最好是指向同一块空间的指针,不然它们的加减没有意义。我们在学习C语言的时候,是不是觉得指针这章节“巨简单”,一听就会,一写就废。

2024-03-07 15:17:19 423 1

原创 【游戏专区】扫雷

这时候,我们运行程序,你就会发现有一道黑影一闪而过,那是因为我们计算机处理数据特别快,我们肉眼很难捕捉,所以我们要阻塞一下,让其停止,等待我们下一步操作。我们了解了扫雷的规则,那我们要怎么写它呢,首先,我们看到它的很多格子,能想到我们所学C语言的什么,没错啦,就是二维数组。我们现在基本什么都有了,但是这样还不行,因为我们现在是明文,玩家可以看到我们的雷,所以就没什么可玩性,为了我们游戏的可玩性,我们有两套方案。我们玩过扫雷的都知道,当我们点击空白也就是0的时候,我们就展开一片,我们应该怎么做呢,让我们。

2024-01-31 16:24:29 1261

原创 欢迎走进C语言-(通讯录小项目)

很多细心地小伙伴已经发现了,我们在打开文件和增加成员的函数中都调用了增容函数会不会有冲突,导致多次增容呢,其实,仔细想一想我们在程序执行的时候只调用一次初始化函数,在获取数据的时候会不会出现数据大于我们申请的空间,我们是不是需要申请空间用于加载我们的数据,以免数据丢失。我们有了增加成员的函数,为了验证我们写的函数是否有问题,我们可以写一个显示成员函数,将我们存入的数据打印出来,来判断我们写的是否正确。那如果有一天我们存入的人员惹我们不高兴了,我们想跟他们同归于尽或者销毁他们,我们能做到吗,

2024-01-30 10:11:30 927 1

原创 “巧妙的”栈和队列(2)

熟悉我们套路的小伙伴应该都清楚,接下来就是我们出数据了,还记得我们的函数声明吗,我们设计了,队头出数据和队尾出数据,但我们队尾出数据只能出队尾本身数据,而无法出队尾的上一个数据。那可能有人就会有疑问了,为什么让他们指向NULL,而不是malloc一个新节点,让他们指向新节点呢,这也是可以的,至于怎么做,那就交给你们喽,让我们接下实现队列的入数据。那是不是很好的发挥出了我们链表的优势呢,那我们一起来写一个吧,老规矩,先写结构体呗。好啦,那我们来实现它,给我们今天的学习画上句号吧。今天我们要实现的接口,如下。

2024-01-25 14:31:21 400 1

原创 “巧妙的”栈和队列(1)

栈的最后一个元素称为栈顶元素,栈顶元素可以通过栈顶指针来访问和修改栈的插入和删除操作通常在栈顶进行,因此插入和删除操作的效率比较高。在写之前,我们应该先了解用我们所学到的顺序表和链表那个实现好,按照栈的先进后出的特性,很明显顺序表比较更容易满足其要求,大家都应该知道链表尾删,是需要先找尾并记住它的前一个,这不利于我们出数据。哈哈,开个玩笑,我们要去学习栈和队列,我们是不是也应该去了解它的概念,那什么是栈,又什么是队列呢,那么接下来,就让我们一起看看。接下来我们要实现,插入,删除,取栈顶数据的接口。

2024-01-25 10:54:48 411 1

原创 “复杂的”双向带头循环链表

在这里很多小伙伴应该都想明白了,我们写的是带头双向循环链表,那这个头怎么来的,难道创建结构体附赠的吗,显然不是。这种链表的特点是链表的头结点和尾结点都是同一个节点,并且头结点只存储一个指针,指向链表的第一个节点,而链表的最后一个节点的指针指向头结点。哈哈,有没有问题,我们有了头插,尾插,头删,尾删。很多朋友可能想到了,我们既然有了任意位置的插入和删除,那我们能不能把尾插和头插,尾删和头删利用任意位置的插入,删除搞定呢。感觉好复杂啊,应该很不容易实现吧,其实,它是只纸老虎,善于伪装。

2024-01-23 14:21:44 498 1

原创 有趣的单链表

链表的第一个节点称为头节点。我想聪明的你们应该也发现了一种极端情况,当我们的链表被删的没有数据了应该怎么办,是继续删吗,答案当然是否定的,在这里我使用了比较暴力的解法:断言(assert)报错,当然你们也是可以使用相对温柔的做法的。很明显我们写的是真确的,很多细心的小伙伴可能会发现我们传的是结构指针的地址,所以我们在接受参数的时候必须用二级指针去接受,当然,小伙伴们也是可以用返回值来接收的。其实原因也很简单,我们这里创建的是没有哨兵位头结点的单链表,我们要去改变它的头结点,所以我们就应该传它的地址过去。

2024-01-23 09:08:42 343 1

原创 博客之旅第一站

我将通过每天至少花五个小时去学习C语言,数据结构与算法,Linux操作系统等的学习逐步提升自己的编程水平,在这个账号上我也会分享并加以总结我每天的学习内容,也会将我所写的代码分享出来,希望能得到你的指点。我将提供有用的信息,希望能够帮助你更好地应对学术挑战,提高你的学术成绩,或者简单地增加你的知识。如果你和我一样热爱学习、追求知识,或者只是对学术和学习有兴趣,那么请订阅我的账号,我们可以一起在这个学术之旅中探索和成长。我想通过这个博客与你分享我的学术和学习经验,以及我对知识和教育的热爱。

2024-01-16 19:42:02 332 1

原创 完成人生中的第一个C程序(梦开始的地方)

恭喜你,人生第一段代码已经全部完成了。

2024-01-16 16:35:38 356 1

原创 如何学好C

3.模仿别人代码(注意并发抄袭),看别人写代码思路,尝试将其复现出来。2.制订学习计划,按计划逐步进行,,推荐上传自己写的代码。4.实现一些小项目,如五子棋,贪吃蛇,电话记录本等。1.安装编程软件(最好是安装不是vs2022)

2024-01-16 10:39:11 343 1

空空如也

空空如也

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

TA关注的人

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