自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 UDP/TCP协议

对方主机发送应答报文时会将主机的接受缓冲区目前容量记录在报头的窗口大小中,拥塞窗口大小由主机自行记录,完整的 TCP 窗口大小是 “拥塞窗口(cwnd)” 和 “接收窗口(rwnd)” 中的较小值。窗口最左边确认收到,中间丢包,接收端会持续发送丢失报文段对应序号的确认报文。udp没有确认机制,拥塞控制,连接机制,发送的报文在网络中丢了,目的主机也不知道,源主机也不会给应用层发送任何错误信息。tcp可靠传输,在通信时,需要创建连接,结束通信时要释放连接,三次握手建立连接,四次挥手释放连接。

2025-11-19 08:30:00 867 1

原创 进程通信之管道通信

本文介绍了本地进程通信中的管道通信方式。管道分为匿名管道和命名管道两种,都是通过操作系统创建的内存缓冲区实现通信。匿名管道通过pipe()系统调用创建,适用于有亲缘关系的进程间单向通信;命名管道通过mkfifo创建文件,允许任意进程间通信。文章详细说明了两种管道的使用步骤,包括创建、读写操作和关闭过程,并总结了管道通信的四种典型现象:当管道满时写端阻塞、空时读端阻塞、读端关闭时写端终止、写端关闭时读端返回0。通过管道接口,进程可以实现高效的本地通信。

2025-09-17 08:00:00 286

原创 动静态库原理与实战全解析

动静态库是代码复用和程序编译的重要工具。静态库在编译时将代码复制到可执行文件中,使程序独立运行但体积较大;动态库则在运行时加载,实现代码共享但依赖外部环境。制作静态库需使用ar命令打包.o文件,动态库需通过gcc -shared生成位置无关码。使用时,静态库需指定头文件和库路径,动态库需配置环境变量或复制到系统目录。文章详细介绍了动静态库的区别、制作方法和使用技巧,包括通过命令和Makefile两种方式打包,以及如何解决动态库运行时加载问题。

2025-09-12 08:00:00 717

原创 经典排序之选择排序

选择排序的原理是遍历整个数组,首先找到序列中的最小(或最大)元素,再将最大元素和最小元素分别放在数组的始末位置。接着,在剩下的元素中找到最小(或最大)元素,放置在已排序元素的末尾。重复这个过程,直到整个序列排序完成。选择排序的时间复杂度为O(n^2),不论序列是否已经部分排序,每个元素都需要与其他元素进行比较和交换位置。空间复杂度为O(1).具体步骤如下:(降序)

2024-09-05 12:46:07 232

原创 经典排序之冒泡排序

冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,以升序为例,从首位置开始向后遍历数组,一次比较两个元素,如果比首元素小就交换。遍历数列的工作是重复进行的,直到没有再需要交换的元素为止。这个算法的名字由来是因为越小(或越大)的元素会经过交换慢慢“浮”到数列的顶端。由于冒泡排序是两层循环的嵌套,它的循环次数为n-1,n-2,n-3....1满足等差数列,所以其时间复杂度为O(n*2),它的空间复杂度为O(1)。由于该排序的时间复杂度过高,在实际应用中,通常会使用效率更高的排序算法。空间复杂度:O(1)

2024-09-05 12:17:17 268

原创 经典排序之希尔排序

希尔排序是在插入排序的基础上进行的优化,插入排序在之前的博客中有详细的讲解,希尔排序其实就是分组多次插入排序。从插入排序我们可以知道,插入排序即先将第一个数看成有序数组在向后遍历,将后一个值插入到这个有序数组中。而希尔排序就在在这个的基础上,将数组分组在进行插入排序。由于对gap取不同的值,时间复杂度各不同。大概为O(n*1.25)或O(1.6*n*1.15)如图每条颜色的线表示一组,将其分别进行插入排序,使整个数组局部有序一些,在进行最后排序。

2024-08-31 09:21:45 260

原创 经典排序之堆排序

堆排序实现

2024-08-29 14:19:17 488

原创 经典排序之快速排序

平均情况:在随机选取基准值的情况下,快速排序的平均时间复杂度接近O(nlogn)。尽管在理论上平均时间复杂度为O(nlogn),但实际应用中由于常数因子较小,快速排序通常比其他O(nlogn)的排序算法更快。最坏情况:当每次选取的基准值都是最小或最大元素时,快速排序退化成类似冒泡排序的效率,此时时间复杂度为O(n^2)。快速排序是一种常用的排序算法,其原理是通过将一个数组分成两个子数组,使得左子数组中的所有元素小于等于右子数组中的所有元素,然后对这两个子数组分别进行快速排序,最后将左子数。

2024-08-29 14:18:36 283

原创 经典排序之归并排序

归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。类似二叉树的前序遍历,先向下递归,找到两个相邻元素,排这两个元素,每个元素当做一个有序数组排序,在以次向上调用排序。先开辟一个和数组大小一致的相同数组,将排序的数组存到拷贝数组中,最后排序结束再重新拷贝到原数组。作为一种典型的分而治之思想的算法应用,归并排序的实现可以使用递归实现。其时间复杂度为O(n*logN),空间复杂度为O(N),稳定。

2024-03-25 19:39:44 292 1

原创 经典排序算法之插入排序

插入排序是一种简单直观的排序算法,它的基本思想是将一个待排序的元素插入到已经排好序的序列中的适当位置,从而得到一个新的有序序列。

2024-03-25 19:19:29 657 1

原创 自定义类型:结构体

结构体的对齐规则:1. 结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处2. 其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。(对⻬数 = 编译器默认的⼀个对⻬数 与 该成员变量⼤⼩的较⼩值)vs的默认对齐数为8

2024-01-17 10:37:12 774

原创 c语言动态内存管理

malloc为c语言提供的一个开辟动态内存的一个函数,会在内存的堆区开辟连续的内存,并且返回指向这块空间的指针。在c语言的学习中我们学习了内置数据类型和自定义类型的变量的建立,我们发现位于此类变量建立之后,其在内存开辟的大小是确定的,在数组中一旦数组建立其大小就无法更改,不但如此有些在程序运行中才知道需要多大的空间就十分不方便。realloc比较灵活,他的功能是对开辟的空间较小时,可以调整申请空间的大小。ptr为要追加的空间的指针,size为要追加的字节数。对malloc,free的简单运用。

2023-12-07 09:30:00 389

原创 字符串函数和内存函数以及模拟实现

strlen的功能是查找字符串的个数,他查的是字符串中'\0'前字符的个数,返回值是size_t无符号整型,在使用的过程中需要注意的是如果字符数组中没有'\0',就会从数组最后一个元素继续寻找'\0',直到找到'\0'为止,所以返回值为随机值。进行比较,相同返回0,字符串的比较为对应比较ascll值,例如"abc","aca","abc"字符串大,因为第二个元素b的ascll>c,所以*str1>*str2,返回>0的数,反之返回<0的数。中两者的串联形成的新字符串的末尾。参数指向的数组的大小应至少为。

2023-11-30 10:17:27 1470

原创 二维数组实现扫雷游戏

难点-1,设置随机雷我们可以用rand函数进行实现,需要注意的是我们需要设置一个起始种子才行srand((unsigned int)time(NULL))设置一个随机的种子,rand的随机数过大我们只需要一个1-9的数字,只需要rand%9+1即可。需要注意的是我们可以将退出设计成0,当输入0是即可退出程序。难点-2,当输入坐标,我们需要排查周围的雷的个数但是对于处在边上的数据如何计算他的周围雷的个数。将'0'-'0'=0. '1'-'0'=1所以排查完四周的雷只需要将其-8'0'即可。

2023-10-31 22:02:01 262 1

原创 指针和指针类型

一 指针和指针变量指针是内存中最小单元的编号,也叫地址(口语中的指针通常指的是指针变量),地址就像访问数据的门牌号,指向内存单元,其中最小单元为一个字节(即一个字节一个地址)。通过地址可以找到存储的数据。指针变量是用来存放地址,其大小可以是4个字节或者8个字节。二 指针类型int*指针指向int类型short* 指针指向shortlong*指针指向longfloat*指针指向floatchar*指针指向char例如a的数据类型是整形所以用int*类型的指针变量p中存放a的地址。

2023-09-30 17:31:38 222 2

空空如也

空空如也

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

TA关注的人

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