- 博客(36)
- 收藏
- 关注
原创 Linux——网络层-IP协议以及路由选择
本文系统阐述了IP协议格式、路由选择机制、网络划分(A/B/C类及CIDR)、子网掩码应用、特殊IP地址、公网与私网区分,以及NAT/NAPT技术原理与应用。重点解析了IP报头字段功能、子网划分计算方法、NAPT通过端口复用实现多设备共享公网IP的机制,并对比了静态NAT与NAPT的差异,总结其在节约地址、安全隔离方面的优势及对端到端通信的限制。
2026-10-26 08:24:16
39
原创 Linux——UDP协议和TCP协议
UDP协议无连接、不可靠,面向数据报,最大长度64K-8,支持广播;校验和采用二进制反码求和。TCP协议面向连接、可靠传输,基于字节流,通过三次握手建立连接、四次挥手断开,具备滑动窗口、拥塞控制、确认应答等机制,确保数据有序、完整到达,但存在粘包问题,需应用层处理。
2026-10-22 17:07:12
134
原创 数据结构——红黑树
红黑树是一种自平衡二叉搜索树,通过颜色属性(红/黑)保证近似平衡,其四大性质确保任意节点到叶节点路径的黑色节点数相同,从而限制高度差不超过2倍。相比AVL树更宽松的平衡要求,红黑树在插入、删除操作中旋转次数更少,适合频繁修改的场景。插入时新节点默认为红色,若父节点为红则需调整;删除时通过旋转与变色恢复平衡。代码实现包含节点定义、插入/删除调整、左右旋等核心函数,广泛应用于标准库如C++ STL的map/set中。
2026-10-22 10:55:05
146
原创 Linux——HTTP协议HTTPS以及DNS协议详解
本文系统阐述HTTP协议核心机制,涵盖协议分层(OSI/TCP/IP)、请求-响应模型、URL结构与编码、请求/响应格式及状态码。重点解析GET/POST区别、Cookie/Session/Token身份认证机制演进,深入探讨HTTPS安全体系(SSL/TLS加密流程、数字证书验证),并完整梳理从输入URL到页面渲染的全流程:DNS解析、TCP三次握手、TLS握手、请求发送、服务器处理、响应接收与浏览器渲染。内容涵盖网络代理、NAT技术、缓存优化等关键技术,全面呈现现代Web通信原理。
2026-10-10 15:12:05
279
原创 数据结构——AVL树
AVL树是为解决二叉搜索树(BST)在频繁插入、删除后可能退化为链表,导致时间复杂度从O(logN)降为O(N)的问题而提出的自平衡二叉搜索树。其核心在于通过平衡因子(左右子树高度差)控制,确保任意节点的平衡因子为-1、0或1。当插入或删除引发失衡时,通过四种旋转方式(LL、RR、LR、RL)进行调整,维持树的平衡性,从而保障所有操作的时间复杂度稳定在O(logN)。
2026-09-29 15:10:56
233
原创 数据结构——二叉搜索树(BST)
二叉排序树(BST)是一种有序的二叉树结构,满足左子树所有节点值小于根,右子树所有节点值大于根。中序遍历结果为递增序列。采用链式存储,支持高效插入、删除与查找操作。通过定义节点结构体及实现初始化、查找、插入、删除、遍历等函数接口,可构建完整的BST。删除时分无子、单子、双子三种情况,双子节点用直接后继替换,实现“狸猫换太子”。辅助函数如获取前驱、后继,支持更灵活的节点操作。广泛应用于文件系统与数据库索引。
2026-09-23 10:01:49
163
原创 数据结构——树的基础、二叉树的前中后递归与非递归遍历以及正S倒S遍历
本文系统介绍了树与二叉树的基本概念、性质及遍历方法。树是具有根节点和子树结构的非线性数据结构,包含节点、度、深度、层次等核心概念。二叉树每个节点最多有两个子树,且有左右之分,具有特定性质如第i层最多2^(i-1)个节点。重点阐述了前序、中序、后序、层序等遍历方式,涵盖递归与非递归实现,并介绍完全二叉树、满二叉树、平衡二叉树等特殊形态及其存储结构。
2026-09-21 08:51:41
216
原创 Linux——多路转接之epoll
Select、Poll与Epoll是Linux下常用的I/O多路复用机制。Select受限于1024描述符,需频繁拷贝和遍历,效率低;Poll突破数量限制,但仍有遍历开销;Epoll采用事件回调和就绪链表,仅返回就绪描述符,性能随描述符增多不下降,适合高并发场景,但跨平台性差。其支持水平触发(LT)与边缘触发(ET),ET需一次性读完数据以避免遗漏。此外,Epoll存在惊群问题,可通过SO_REUSEPORT、EPOLLEXCLUSIVE或加锁解决。
2026-09-14 10:38:07
81
原创 Linux——多路复用之poll模型
poll函数用于监控多个文件描述符的IO就绪状态,通过pollfd结构体指定要监控的描述符及事件(如POLLIN可读、POLLOUT可写)。调用时将数组拷贝至内核,阻塞等待事件就绪或超时。返回后遍历revents判断实际就绪事件,进行相应IO操作。需忽略SIGPIPE信号防止对端关闭连接时异常退出。示例中监控标准输入可读事件,就绪后读取并打印数据。
2026-09-11 10:41:55
231
原创 Linux--多路转接之select
本文系统介绍了I/O模型中的阻塞、非阻塞、同步、异步及多路复用等概念,重点解析了select模型的原理与实现。select通过位图结构监控大量描述符的IO就绪事件,支持超时控制(精确到微秒),具有良好的跨平台性。但其存在描述符数量受限(默认1024)、每次需重置集合与超时时间、内核遍历效率低等缺点,适用于描述符数量较少或需跨平台兼容的场景。
2026-09-11 08:16:48
116
原创 Linux--套接字编程
本文系统介绍了套接字编程的基本概念与实现流程,涵盖网络通信的C/S与B/S架构、TCP/UDP协议差异及套接字API接口。重点讲解了socket、bind、listen、accept、connect、recv、send等核心函数的使用,并通过UDP和TCP通信实例展示服务端与客户端程序编写。针对单线程服务器无法并发处理多客户端的问题,提出多进程与多线程解决方案,提升服务器并发能力。同时强调字节序转换、IP地址处理及文件描述符管理的重要性,为网络编程实践提供完整技术框架。
2026-09-10 08:59:15
364
原创 数据结构——快速排序
快速排序通过分治思想,以基准值将序列划分为左右两部分,左小右大,递归处理子序列直至有序。常用“挖空法”实现单次划分,利用双指针从两端向中间扫描交换元素,最后将基准值放入正确位置。也可用辅助数组实现非递归版本,借助栈模拟递归过程。优化策略包括小数据量改用插入排序、三数取中法选基准值,提升性能。整体时间复杂度平均为O(n log n),是高效通用的排序算法。
2026-09-09 17:05:15
85
原创 数据结构——堆排序
<think>我们根据用户要求,生成≤150字的文章摘要。用户提供了关于二叉树、堆排序的内容。摘要需概括核心要点,不超过150字。注意字数。需简洁。文章摘要:介绍了二叉树及特殊形态,满二叉树和完全二叉树定义;大/小顶堆均是完全二叉树,堆调整过程。堆排序利用完全二叉树和堆调整,从最后一个非叶子节点开始由内向外调整,首尾交换并递归调整实现排序。需凝练。 检查字数。写一段话。</think>二叉树定义及满/完全二叉树形态;大顶堆、小顶堆均为完全二叉树。堆排序先由最后一个非叶子节点开始,从右
2026-09-08 16:35:33
228
原创 数据结构——冒泡排序及优化
摘要:冒泡排序是一种基础的排序算法,通过多轮遍历实现排序。每一轮从左到右两两比较相邻元素,若左大右小则交换,使得最大值逐渐"冒泡"到序列末尾。代码使用双重循环:外层控制轮次(n-1次),内层处理每轮比较(比较次数随轮次减少)。时间复杂度为O(n²),空间复杂度O(1),适合小规模数据排序。
2026-07-11 14:18:44
300
原创 数据结构--选择排序
选择排序的核心思想是通过每次从未排序区间中找到最小(或最大)元素,并将其与未排序区间的第一个元素交换位置,从而逐步构建有序区间。算法实现时,初始默认所有元素为未排序序列,通过双重循环完成排序:外层循环控制排序趟数,内层循环遍历未排序区间寻找最小值位置。若最小值不在当前起始位置,则进行交换。时间复杂度为O(n²),适用于小规模数据排序。
2026-07-11 13:50:16
228
原创 数据结构——希尔排序
本文介绍了希尔排序(缩小增量排序)作为直接插入排序的优化方法。希尔排序通过将序列分割为若干子序列(按增量分组)进行直接插入排序,逐步缩小增量直至1完成最终排序。其核心在于增量数组的选取:需从大到小、互素且最后为1。文章分析了希尔排序的时间复杂度难以精确计算,取决于增量序列选择。提供了两种实现思路:逐组处理和轮换处理,并给出C语言代码示例,展示如何通过不同增量值进行多趟排序。希尔排序相比直接插入排序能显著提升效率,尤其适用于中等规模数据。
2026-07-10 18:04:44
238
原创 数据结构——直接插入排序
本文介绍了插入排序的基本原理和实现方法。插入排序通过将数组分为已排序和未排序区间,每次从未排序区间取出第一个元素插入到已排序区间的合适位置。算法采用原地排序,不需要额外空间,但需注意避免数据覆盖。具体实现时,首先将待插入元素临时保存,然后与已排序元素从右向左比较,遇到更大元素就后移,直到找到合适位置插入。代码示例展示了完整的插入排序实现过程,通过双重循环完成排序。
2026-07-08 18:32:57
249
原创 数据结构——哈希表的基础
本文介绍了哈希技术的核心概念与应用。哈希函数通过建立数据与存储位置的映射关系(存储位置=f(关键字)),将查找时间复杂度从O(n)优化至理想状态O(1)。文章详细阐述了6种哈希函数构造方法(如最常用的除留余数法)和4种解决哈希冲突的方案:开放地址法(含线性探测、二次探测、随机探测)、再散列函数法、公共区溢出法和链地址法,其中重点解析了链地址法的代码实现,包括结构体设计、哈希地址计算及基本操作函数(初始化、插入、查找、删除等)。哈希技术兼具存储与查找功能,能有效提升数据检索效率。
2026-07-06 20:38:11
208
原创 数据结构——栈和队列的相互模拟
摘要:本文介绍了用两个栈模拟队列和两个队列模拟栈的方法。对于栈模拟队列,入队时直接压入S1栈,出队时若S2为空则将S1元素全部倒入S2后弹出;对于队列模拟栈,入栈时直接入队Q1,出栈时将非空队列的前n-1个元素转移到另一个队列后删除最后一个元素。两种方法都通过数据结构的转换实现了不同特性的数据结构模拟,并提供了详细的代码实现思路。
2026-04-28 17:39:18
340
原创 数据结构——循环队列
循环队列是一种通过数组实现的首尾相连的队列结构,解决了顺序队列的空间浪费问题。其核心实现包括:1.通过移动指针实现O(1)时间复杂度的插入删除;2.采用取模运算实现头尾相连;3.预留一个空位区分队空和队满状态;4.使用公式(rear-front+maxsize)%maxsize计算有效元素个数。主要操作包括初始化、入队、出队、判空、判满等,其中入队和出队操作需特别注意指针的循环移动。该结构有效利用了数组空间,避免了普通队列的"假溢出"问题。
2026-04-20 21:21:27
608
原创 数据结构——链式队列
摘要:本文详细介绍了链式队列的实现方法。队列是一种先进先出(FIFO)的线性表,通过定义front和rear指针分别指向队头和队尾节点。文章阐述了链式队列的结构体设计、初始化、入队(尾插)、出队(头删)等核心操作,并提供了判空、获取队头元素、打印队列、销毁队列等辅助功能的实现代码。最后通过测试案例验证了队列各项操作的正确性,展示了链式队列从创建、操作到销毁的完整生命周期。所有操作的时间复杂度均为O(1),体现了链式队列高效的特点。
2026-04-20 18:08:37
477
原创 数据结构——栈的链式存储结构及实现
本文介绍了链栈的定义、实现和基本操作。链栈是栈的链式存储结构,通过单链表实现,具有动态内存分配的特点,不存在栈满问题。文章详细说明了链栈的结构体设计、初始化方法、入栈(头插法)、出栈(头删法)、获取栈顶元素、判空操作以及打印和销毁功能的代码实现。其中重点讲解了入栈和出栈操作的实现逻辑,时间复杂度均为O(1),体现了链栈在操作效率上的优势。最后通过主函数测试展示了链栈的基本使用流程。
2026-04-15 19:18:59
260
原创 Linux——printf函数——fork函数——僵死进程——孤儿进程
本文摘要主要讨论了C语言中printf函数的输出缓冲机制、进程终止方法以及fork函数的使用细节。主要内容包括: printf输出会先存入缓冲区,需满足缓冲区满、强制刷新或程序结束才会输出; exit()和_exit()的区别,前者会执行用户态清理,后者直接内核终止; fork()创建子进程的返回值处理,包括父子进程的不同执行路径; 通过示例展示了fork后的进程并发执行特性; 介绍了僵死进程的产生原因及wait()解决方法,包括退出状态码的获取方式。 文中通过多个代码示例(如缓冲区演示、fork并发打印、
2026-04-13 13:24:50
601
原创 数据结构——顺序栈
本文介绍了顺序栈的定义及其C语言实现。顺序栈是一种后进先出(LIFO)的线性表,限定仅在表尾(栈顶)进行插入和删除操作。文章详细阐述了顺序栈的结构体设计(包含数组指针、栈顶指针和栈大小),并提供了初始化、入栈、出栈、获取栈顶元素等核心操作的实现代码。其中,入栈操作涉及判满和扩容机制,出栈操作只需移动栈顶指针。此外,还实现了判空、判满、打印、清空和销毁等辅助功能,并通过主函数测试验证了各功能的正确性。该实现展示了顺序栈的基本特性及其动态扩容能力。
2026-04-13 13:21:21
482
原创 Linux——gcc编译器、makefile与gdb调试
本文摘要: 可执行文件格式:Linux使用ELF,Windows使用PE格式 内存与硬盘关系:内存临时装载程序执行,硬盘永久存储 汇编语言特点:直接操作硬件,与CPU架构强相关,使用助记符替代二进制指令 GCC编译流程:预处理→编译→汇编→链接四阶段 多文件编译:通过.o文件集中编译,使用Makefile自动化构建 GDB调试:需编译为debug版本,常用命令包括断点设置(b)、运行(r)、逐行调试(n)等 调试注意事项:字符串处理需注意特殊字符(如\n)的影响
2026-04-07 11:30:26
417
原创 数据结构——单链表常见面试习题
本文介绍了单链表的常见操作及算法实现。主要包括:1)单链表逆置的两种方法(辅助节点法和三指针法);2)查找链表倒数第k个节点的快慢指针法;3)判断链表相交及求交点的长度差法;4)删除节点的数据覆盖法;5)判断回文链表的数组比较法;6)判断链表有环及找入环点的快慢指针法。每种算法都给出了详细思路和代码实现,涉及指针操作、长度计算等链表基本操作技巧。
2026-04-05 05:07:01
827
原创 Linux——静态库与动态库
本文介绍了静态库和动态库的概念及创建方法。静态库(.a)在编译时链接到程序中,使可执行文件独立但体积大;动态库(.so)在运行时加载,可共享内存但依赖外部文件。创建静态库使用ar命令,动态库使用gcc -shared -fPIC命令。动态库使用需设置环境变量或移动至标准库目录。二者主要区别在于:链接时机(编译时/运行时)、内存使用(重复/共享)、更新维护(需重编译/直接替换)和使用场景(独立程序/共享功能)。动态库更节省资源但依赖性强,静态库则相反。
2026-03-31 17:29:05
516
原创 C语言——高级内存——整数与无符号整数在内存中的存储和不同格式控制符下的输出规则
本文详细介绍了C语言中基本数据类型的存储方式及运算规则。主要内容包括:1)整数家族(char/short/int/long/longlong)和有符号/无符号类型的格式控制符、字节大小及取值范围;2)浮点数类型(float/double)的基本信息;3)内存存储方式(大端/小端存储)及示例;4)原码、反码、补码的转换规则及其在负数和正数相加中的应用;5)不同数据类型间转换时的截取和符号扩展规则,并通过多个代码示例演示了类型转换时的具体行为。文章特别强调了补码在计算机存储中的核心作用以及符号位在不同类型转换中
2026-03-31 15:05:49
670
原创 数据结构——双向链表的逻辑实现及C语言的函数体现
本文介绍了双向链表的基本概念及其在C语言中的实现方法。首先分析了单链表的局限性,进而引出双向链表的特点:每个节点包含数据域、前驱指针和后继指针。文章详细阐述了双向链表的结构体设计,并提供了初始化、节点创建、插入删除、查找判空、获取长度、销毁和打印等核心操作的函数实现。通过对比单链表,双向链表实现了双向遍历,提高了操作效率,但需要更多内存空间来存储额外的指针。这些基础操作构成了双向链表的核心功能框架。
2026-03-30 23:13:00
818
原创 Linux--常用命令及代码效果体现
本文摘要:本文介绍了Linux系统常用的基础命令及操作方法,主要包括:1) 目录操作命令cd、ls、mkdir、rmdir等;2) 文件操作命令touch、vi/vim、cp、mv、rm等;3) 文件内容处理命令grep、cat、tail等;4) 压缩打包命令tar;5) 进程管理命令ps、kill、jobs等。重点讲解了vim编辑器的使用模式切换、文本编辑和保存方法,以及进程的前后台管理操作。这些命令涵盖了Linux系统日常操作的基本需求,是系统管理和开发的基础技能。
2026-03-25 16:23:21
729
原创 Linux系统目录结构-文件类型-文件权限介绍
本文介绍了Linux系统的核心架构与目录结构。Linux体系分为内核和用户空间两大层次,采用倒树状的目录结构,根目录为"/"。重点解析了绝对路径与相对路径的区别,以及用户家目录的概念。同时阐述了Linux文件类型与权限系统,其中rwxrwxrwx表示文件具有完全权限(可读、可写、可执行)。这些基础知识是理解和使用Linux系统的重要前提。
2026-03-24 14:54:45
229
原创 数据结构——单循环链表的逻辑实现及C语言的函数体现
本文介绍了循环链表的基本概念及其C语言实现方法。循环链表是将单链表的尾节点指向头节点形成的环形结构,与单链表的主要区别在于循环判断条件。文章详细讲解了循环链表的各项操作函数实现,包括初始化、节点申请、头插尾插、按位置插入、头删尾删、按值删除、查找、判空、获取长度、销毁和打印等功能。每个函数都给出了具体的实现代码,涵盖了循环链表的核心操作,为数据结构的实际应用提供了完整的参考实现。
2026-03-22 23:22:18
710
原创 C语言——结构体数组
本文介绍了C语言结构体的定义、初始化和操作方法。首先定义了一个包含姓名、年龄、学号和成绩的学生结构体struct stu。然后展示了三种初始化方式:直接初始化、先定义后赋值初始化,以及通过键盘输入初始化。接着讲解了结构体成员的两种访问方式:值访问(使用点运算符)和地址访问(使用箭头运算符)。最后提供了结构体的应用示例,包括打印函数实现、按成绩排序的冒泡算法、计算平均成绩并输出高于平均分的学生信息。文中还通过主函数演示了结构体数组的创建和各项操作的实际应用。
2026-03-21 16:11:05
265
原创 数据结构——单链表的逻辑实现及C语言的函数体现
本文摘要:本文详细介绍了线性表的链式存储结构实现方法。主要内容包括:1)链表的基本概念,如结点结构(数据域和指针域)、头指针和头结点;2)单链表的实现准备和函数设计,包括初始化、结点申请、插入(头插、尾插、按位置插)、删除(头删、尾删、按位置删、按值删)等操作;3)辅助功能如查找、判空、获取长度、打印和销毁链表的实现。文章通过C语言代码示例展示了各功能的具体实现方法,为理解和使用链式存储结构提供了详细指导。
2026-03-16 20:50:59
610
原创 数据结构——线性表的存储结构及C语言的函数实现
(注:区分线性表长度和数组长度:线性表长度是指线性表的元素个数,而数组长度是指该线性表能够存储的最多元素的个数 在任何情况线性表的长度都应该小于等于数组长度。(1)以一个格子为一个存储单元为例 根据上图可以宏观的看出 顺序存储申请的空间都是连续的 顺序表按照元素顺序依次放入一个一个存储单元之中。线性表就像一个队列 除了唯一的第一个元素只有后继没有前驱 唯一的最后一个元素只有前驱没有后继 其余元素均有它对应的唯一的前驱和后继。线性表的顺序存储结构指的是 用一段地址连续的存储单元依次存储线性表中的数据元素。
2026-03-15 15:18:49
498
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅