单链表基本操作的实现与解析(补充)
目录
一、引言
二、代码实现
遍历考虑情况
三、操作解析
查找操作(sltfind函数)
前插操作(sltinsert函数)
后插操作(sltinsertafter函数)
前删操作(slterase函数)
后删操作(slteraseafter函数)
四、应用场景与拓展
应用场景
拓展
五、总结
一、引言
作者主页:共享家9527-CSDN博客
作者小仓库:https://blog.csdn.net/nplplus/category_12904039.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12904039&sharerefer=PC&sharesource=nplplus&sharefrom=from_link
单链表作为一种基础且常用的数据结构,在计算机科学领域应用广泛。它以节点为基本单元,通过指针构建节点间的线性关系,每个节点包含数据域与指向下一节点的指针域。这种链式存储结构相比数组,在内存使用上更加灵活,无需连续的内存空间。在实际编程中,对单链表执行查找、插入和删除等操作是数据处理和算法设计的基础,理解和掌握这些操作,对后续学习复杂数据结构与算法至关重要。本文将结合具体的C语言代码,深入且细致地剖析单链表的这些基本操作。
二、代码实现
c#include <stdio.h>#include <stdlib.h>#include <assert.h>// 定义单链表节点结构typedef int SLTDataType;typedef struct SLTNode {SLTDataType data;struct SLTNode* next;} SLTNode;// 创建新节点的函数SLTNode* BuySLTNode(SLTDataType x) {SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));if (newnode == NULL) {perror("malloc");return NULL;}newnode->data = x;newnode->next = NULL;return newnode;}// 查找函数SLTNode* sltfind(SLTNode* pphead, int x) {SLTNode* cur = pphead;while (cur) {if (cur->data == x) {return cur;}else {cur = cur->next;}}return NULL;}// pos前插函数void sltinsert(SLTNode** pphead, SLTNode* pos, int x) {assert(pphead);assert(pos);if (pos == *pphead) {SLTNode* newnode = BuySLTNode(x);newnode->next = *pphead;*pphead = newnode;}else {SLTNode* pre = *pphead;while (pre->next != pos) {pre = pre->next;}SLTNode* newnode = BuySLTNode(x);pre->next = newnode;newnode->next = pos;}}// pos后插函数void sltinsertafter(SLTNode* pos, int x) {assert(pos);SLTNode* newnode = BuySLTNode(x);newnode->next = pos->next;pos->next = newnode;}// pos前删函数void slterase(SLTNode** pphead, SLTNode* pos) {assert(pphead);assert(pos);if (pos == *pphead) {SLTNode* temp = *pphead;*pphead = (*pphead)->next;free(temp);}else {SLTNode* pre = *pphead;while (pre->next != pos) {pre = pre->next;}pre->next = pos->next;free(pos);}}// pos后删函数,此处修改函数名为slteraseaftervoid slteraseafter(SLTNode* pos) {assert(pos);assert(pos->next);SLTNode* mid = pos->next;pos->next = pos->next->next;free(mid);mid = NULL;}
遍历考虑情况
三、操作解析
查找操作(sltfind函数)
- 函数功能:此函数用于在单链表中查找特定数据值 x 所在的节点。
- 参数:接受链表头指针 pphead 和要查找的值 x 。
- 执行过程:从链表头节点开始,通过 while 循环依次遍历每个节点。在每次循环中,将当前节点 cur 的数据与目标值 x 进行比较。若相等,说明找到目标节点,直接返回该节点指针;若不相等,则将 cur 指向下一个节点继续查找。当遍历完整个链表仍未找到匹配值时,返回 NULL 。例如,在一个包含节点数据为 1, 3, 5, 7 的链表中查找值为 5 的节点,当 cur 遍历到第三个节点时,数据匹配,函数返回该节点指针。
前插操作(sltinsert函数)
- 函数功能:在指定位置 pos 之前插入一个新节点,新节点的数据为 x 。
- 参数:需要链表头指针的二级指针 pphead (用于修改头指针)、插入位置的指针 pos 以及要插入的值 x 。
- 执行过程:首先使用 assert 进行断言检查,确保传入的头指针和插入位置指针有效。若插入位置 pos 恰好是头节点,直接创建新节点,让新节点的 next 指向原头节点,然后更新头指针指向新节点,这样新节点就插入到了头节点之前。若 pos 不是头节点,则从链表头节点开始,通过 while 循环查找 pos 的前一个节点 pre 。找到后,创建新节点,将 pre 的 next 指向新节点,新节点的 next 再指向 pos ,完成插入操作。比如,在链表 1 -> 3 -> 5 中,要在值为 3 的节点前插入值为 2 的节点,先找到值为 1 的节点(即 3 节点的前一个节点),然后按上述步骤插入新节点,链表变为 1 -> 2 -> 3 -> 5 。
后插操作(sltinsertafter函数)
- 函数功能:在指定节点 pos 之后插入一个新节点,新节点的数据为 x 。
- 参数:接受插入位置的指针 pos 和要插入的值 x 。
- 执行过程:先使用 assert 检查 pos 是否有效。然后创建新节点,将新节点的 next 指针指向 pos 的下一个节点,再将 pos 的 next 指针指向新节点。例如,在链表 1 -> 3 -> 5 中,在值为 3 的节点后插入值为 4 的节点,新节点 4 的 next 指向原 3 节点的下一个节点 5 ,然后 3 节点的 next 指向新节点 4 ,链表变为 1 -> 3 -> 4 -> 5 。
前删操作(slterase函数)
- 函数功能:删除指定位置 pos 的节点。
- 参数:接受链表头指针的二级指针 pphead 和要删除节点的指针 pos 。
- 执行过程:首先进行断言检查,保证头指针和要删除节点指针有效。若要删除的节点 pos 是头节点,先保存头节点到临时变量 temp ,然后将头指针更新为原头节点的下一个节点,最后释放 temp 节点的内存。若 pos 不是头节点,则从链表头节点开始,通过 while 循环找到 pos 的前一个节点 pre 。找到后,将 pre 的 next 指针直接指向 pos 的下一个节点,然后释放 pos 节点的内存。比如,在链表 1 -> 3 -> 5 中删除值为 3 的节点,先找到值为 1 的节点(即 3 节点的前一个节点),然后修改指针,将 1 节点的 next 指向 5 节点,再释放 3 节点的内存,链表变为 1 -> 5 。
后删操作(slteraseafter函数)
- 函数功能:删除指定节点 pos 之后的节点。
- 参数:接受删除位置的指针 pos 。
- 执行过程:先使用 assert 检查 pos 及其下一个节点是否有效。然后保存 pos 的下一个节点到 mid ,将 pos 的 next 指针指向 mid 的下一个节点(即 pos 的下下个节点),最后释放 mid 节点的内存。例如,在链表 1 -> 3 -> 5 -> 7 中,删除值为 3 节点后的节点(即值为 5 的节点),先保存 5 节点到 mid ,然后将 3 节点的 next 指向 7 节点,再释放 5 节点的内存,链表变为 1 -> 3 -> 7 。
四、应用场景与拓展
应用场景
数据管理系统:在小型数据管理系统中,单链表可用于存储和管理数据记录,如简单的学生信息管理系统,每个学生信息作为一个节点,通过单链表方便地进行插入、删除和查找操作。
缓存机制:在一些简单的缓存实现中,单链表可以用来管理缓存数据,通过删除最近最少使用的节点(后删操作)来为新数据腾出空间。
拓展
双向链表:单链表只能单向遍历,而双向链表在单链表基础上增加了指向前一个节点的指针,使得遍历更加灵活,可实现从后向前的查找和删除等操作。
循环链表:循环链表的尾节点指向头节点,形成一个环形结构,在一些需要循环处理数据的场景中,如循环队列的实现,循环链表能发挥独特的优势。
五、总结
通过上述代码和解析,我们对单链表的基本操作有了全面且深入的理解。这些操作是处理单链表的基石,在实际的算法设计和数据处理中频繁使用。掌握好单链表的操作,不仅能提升编程能力,更能为进一步学习其他复杂的数据结构和算法,如栈、队列、树等,打下坚实的基础。在实际应用中,应根据具体需求选择合适的数据结构和操作方法,以实现高效的数据处理和算法设计。
相关文章:
单链表基本操作的实现与解析(补充)
目录 一、引言 二、代码实现 遍历考虑情况 三、操作解析 查找操作(sltfind函数) 前插操作(sltinsert函数) 后插操作(sltinsertafter函数) 前删操作(slterase函数) 后删操作&…...
电子学会—2024年月6青少年软件编程(图形化)四级等级考试真题——魔法门
魔法门 1.准备工作 (1)保留默认角色小猫和白色背景; (2)添加角色Home Button,复制9个造型,在每个造型上分别加上数字1到9,如下图所示; 2.功能实现 (1)程序开始,依次克隆出五个Home Button,克隆体之间的间距为90; …...
《加快应急机器人发展的指导意见》中智能化升级的思考——传统应急设备智能化升级路径与落地实践
感谢阅读本次内容分享,下面我将解读分析《加快应急机器人发展的指导意见》,喜欢的点赞支持一下呗~(日更真的很辛苦~),欢迎评论区留言讨论,你们的发言我都会看到~ 《加快应急机器人发展的指导意见》中智能化升级的思考——传统应急…...
Git系列之git tag和ReleaseMilestone
以下是关于 Git Tag、Release 和 Milestone 的深度融合内容,并补充了关于 Git Tag 的所有命令、详细解释和指令实例,条理清晰,结合实际使用场景和案例。 1. Git Tag 1.1 定义 • Tag 是 Git 中用于标记特定提交(commit…...
【每日学点HarmonyOS Next知识】Web上传文件、监听上下左右区域连续点击、折叠悬停、字符串相关、播放沙盒视频
1、HarmonyOS APP内h5原生webview input[typefile]无法唤醒手机上传? 文件上传要使用对应的picker https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/web-file-upload-V5 Web组件支持前端页面选择文件上传功能,应用开发者可以使用on…...
解决电脑问题(3)——显示器问题
当电脑显示器出现问题时,可以根据不同的故障现象采取相应的解决方法,以下是一些常见的情况及解决措施: 屏幕无显示 检查连接:首先检查显示器与电脑主机之间的视频连接线是否插好,确保两端的接口都牢固连接,…...
AArch64架构及其编译器
—1.关于AArch64架构 AArch64是ARMv8-A架构的64位执行状态,支持高性能计算和大内存地址空间。它广泛应用于现代处理器,如苹果的A系列芯片、高通的Snapdragon系列,以及服务器和嵌入式设备。 • 编译器:可以使用GCC、Clang等编译器编…...
免费送源码:Java+springboot+MySQL 房屋租赁系统小程序的设计与实现 计算机毕业设计原创定制
目 录 摘要 1 1 绪论 1 1.1选题意义 1 1.2开发现状 1 1.3springboot框架介绍 1 1.4论文结构与章节安排 1 2 房屋租赁系统小程序系统分析 3 2.1 可行性分析 3 2.1.1 技术可行性分析 3 2.1.2 经济可行性分析 3 2.1.3 法律可行性分析 3 2.2 系统功能分析 3 2.2.1 功…...
前端数据模拟 Mock.js 学习笔记
mock.js介绍 Mock.js是一款前端开发中拦截Ajax请求再生成随机数据响应的工具,可以用来模拟服务器响应 优点是:非常方便简单,无侵入性,基本覆盖常用的接口数据类型支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜…...
【Linux内核系列】:深入解析输出以及输入重定向
🔥 本文专栏:Linux 🌸作者主页:努力努力再努力wz ★★★ 本文前置知识: 文件系统以及文件系统调用接口 用c语言简单实现一个shell外壳程序 内容回顾 那么在此前的学习中,我们对于Linux的文件系统已经有了…...
Adam 优化器与动量法:二阶矩与 ODE 的联系
Adam 优化器与动量法:二阶矩与 ODE 的联系 作为深度学习研究者,你一定对 Adam(Adaptive Moment Estimation)优化器非常熟悉。它因自适应学习率和高效率而成为训练神经网络的标配算法。Adam 使用了一阶动量(梯度的指数…...
嵌入式学习第二十三天--网络及TCP
进程通信的方式: 同一主机 传统 system V 不同主机 网络 --- 解决不同主机间 的进程间通信 网络 (通信) //1.物理层面 --- 联通(通路) //卫星 2G 3G 4G 5G 星链 (千帆) //2.逻辑层面 --- 通路(软件) MAC os LINUX …...
前端表单提交与后端处理全解析:从HTML到Axios与SpringBoot实战
前端表单提交与后端处理全解析:从HTML到Axios与SpringBoot实战 一、GET与POST请求的两种面孔 1. HTML表单基础实现 <!-- GET请求示例:搜索表单 --> <form action="/api/search" method="GET"><input type="text" name="…...
python django orm websocket html 实现deepseek持续聊天对话页面
最终效果: 技术栈: python django orm websocket html 项目结构: 这里只展示关键代码: File: consumers.py # -*- coding:utf-8 -*- # Author: 喵酱 # time: 2025 - 03 -02 # File: consumers.py # desc: import json from asg…...
大白话html语义化标签优势与应用场景
大白话html语义化标签优势与应用场景 大白话解释 语义化标签就是那些名字能让人一看就大概知道它是用来做什么的标签。以前我们经常用<div>来做各种布局,但是<div>本身没有什么实际的含义,就像一个没有名字的盒子。而语义化标签就像是有名…...
考研英语语法全攻略:从基础到长难句剖析
引言 在考研英语的备考之旅中,语法犹如一座灯塔,为我们在浩瀚的英语知识海洋中指引方向。无论是阅读理解中复杂长难句的解读,还是写作时准确流畅表达的需求,扎实的语法基础都起着至关重要的作用。本文将结合有道考研语法基础入门课的相关内容,为大家全面梳理考研英语语法…...
Vue3 生命周期
回顾Vue2的生命周期 创建(创建前,创建完毕)beforeCreate、created挂载(挂载前,挂载完毕)beforeMount、mounted更新(更新前,更新完毕)beforeUpdate、updated销毁…...
hbase-05 namespace、数据的确界TTL
要点 掌握HBase的命名空间namespace概念 掌握HBase数据版本确界 掌握HBase数据TTL 1. HBase的namespace 1.1 namespace基本介绍 在HBase中,namespace命名空间指对一组表的逻辑分组,类似RDBMS中的database,方便对表在业务上划分。Apache…...
线程的常见使用方法
Java中的线程并不是真正意义的线程,我们使用的是Thread类来表示线程,而这个类是 JVM 用来管理线程的一个类,也就是说,每个线程都有一个唯一的 Thread对象 与之关联 每一个执行流都需要有一个对象来进行描述,那么一个Thread对象就是用来表述一个线程执行流的,JVM会将这些对象统…...
架构师面试(十一):消息收发
问题 IM 是互联网中非常典型的独立的系统,麻雀虽小但五脏俱全,非常值得深入研究和探讨,继上次IM相关题目之后,我们继续讨论IM相关话题。 关于IM系统【消息收发模型】的相关描述,下面说法错误的有哪几项? …...
MoonSharp 文档一
目录 1.Getting Started 步骤1:在 IDE 中引入 MoonSharp 步骤2:引入命名空间 步骤3:调用脚本 步骤4:运行代码 2.Keeping a Script around 步骤1:复现前教程所有操作 步骤2:改为创建Script对象 步骤…...
【linux网络编程】端口
一、端口(Port)概述 在计算机网络中,端口(Port) 是用来标识不同进程或服务的逻辑通信端点。它类似于一座大楼的房间号,帮助操作系统和网络协议区分不同的应用程序,以便正确地传输数据。 1. 端口…...
Vulnhub-Node
目录标题 一、靶机搭建二、信息收集靶机信息扫ip扫开放端口和版本服务信息指纹探测目录扫描 三、Web渗透信息收集zip爆破ssh连接 四、提权内核版本提权 利用信息收集拿到路径得到账户密码,下载备份文件,base64解密后,利用fcrackzip爆破zip压缩…...
RK3568平台(camera篇)camera3_profiles_rk3588.xml解析
camera3_profiles_rk3588.xml 是一个与 Android 相机 HAL(硬件抽象层)相关的配置文件,通常用于定义 Rockchip RK3588 平台上的相机设备及其功能。该文件基于 Android 的 Camera3 HAL 框架,用于描述相机的配置、流配置、分辨率、帧率、格式等信息。 以下是对 camera3_profi…...
高阶哈希算法
SHA-256简介 SHA-256 是 **SHA-2(Secure Hash Algorithm 2)**家族中的一种哈希算法,由美国国家安全局设计,并于 2001 年发布。它能够将任意长度的数据映射为一个固定长度256 位,即 32 字节的哈希值,通常以…...
Spark数据倾斜深度解析与实战解决方案
Spark数据倾斜深度解析与实战解决方案 一、数据倾斜的本质与影响 数据倾斜是分布式计算中因数据分布不均导致的性能瓶颈现象。当某些Key对应的数据量远超其他Key时,这些"热点Key"所在的Task会消耗80%以上的计算时间,成为整个作业的木桶短板。具体表现为: Task执…...
Kubernetes滚动更新实践
前言 在我之前的项目中,对微服务升级采用的做法是删除整个namespace, 再重新应用所有yaml。 这种方式简单粗暴,但是不可避免的导致服务中断,影响了用户体验 为了解决更新服务导致的服务中断问题, Kubernetes提供了一种…...
Broken pipe
比较常见的一个问题。 但是并不是每个人都能说清楚。 首先注意下写法: Broken pipe # B大写 p小写 主要是grep的时候别写错了 常见的原因 1、客户端关闭连接。 在服务器端处理请求的过程中,客户端突然关闭了连接,例如浏览器关闭、网络断开…...
doris:ClickHouse
Doris JDBC Catalog 支持通过标准 JDBC 接口连接 ClickHouse 数据库。本文档介绍如何配置 ClickHouse 数据库连接。 使用须知 要连接到 ClickHouse 数据库,您需要 ClickHouse 23.x 或更高版本 (低于此版本未经充分测试)。 ClickHouse 数据库的 JDBC 驱动程序&a…...
前K个高频单词
692. 前K个高频单词 - 力扣(LeetCode) 题目描述: 给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率, 按字典顺序 排序…...
恢复IDEA的Load Maven Changes按钮
写代码的时候不知道点到什么东西了,pom文件上的这个弹窗就是不出来了,重启IDEA,reset windos都没用,网上搜也没收到解决方案 然后开打开其他项目窗口时,看到那个的功能名叫 Hide This Notification 于是跑到Setting里…...
【五.LangChain技术与应用】【31.LangChain ReAct Agent:反应式智能代理的实现】
一、ReAct Agent是啥?为什么说它比「普通AI」聪明? 想象一下,你让ChatGPT查快递物流,它可能直接编个假单号糊弄你。但换成ReAct Agent,它会先推理(Reasoning)需要调用哪个接口,再行动(Action)查询真实数据——这就是ReAct的核心:让AI学会「动脑子」再动手。 举个真…...
Leetcode 62: 不同路径
Leetcode 62: 不同路径 问题描述: 一个机器人位于一个 (m \times n) 网格的左上角(起始点位于 ((0, 0)))。 机器人每次只能向下或向右移动一步。网格的右下角为终点(位于 ((m-1, n-1)))。 计算机器人从左上角到右下角…...
计算机毕业设计SpringBoot+Vue.js火锅店管理系统(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
Docker Desktop 4.38 安装与配置全流程指南(Windows平台)
一、软件定位与特性 Docker Desktop 是容器化应用开发与部署的一体化工具,支持在本地环境创建、管理和运行Docker容器。4.38版本新增GPU加速支持、WSL 2性能优化和Kubernetes 1.28集群管理功能,适用于微服务开发、CI/CD流水线搭建等场景。 二、安装环境…...
算法系列之广度优先搜索解决妖怪和尚过河问题
在算法学习中,广度优先搜索(BFS)是一种常用的图搜索算法,适用于解决最短路径问题、状态转换问题等。本文将介绍如何利用广度优先搜索解决经典的“妖怪和尚过河问题”。 问题描述 有三个妖怪和三个和尚需要过河。他们只有一条小船…...
【技术白皮书】内功心法 | 第一部分 | IP协议的目的与工作原理(IP地址)
目录 IP协议的介绍IP协议的目的与工作原理IP协议处理过程与信件传递的相似IP协议处理过程与信件传递的区别IP协议中的概念IP数据包IP地址IP地址组成IP地址分类和组成A、B、C三类地址的格式设计特殊类型的IP地址与传统通信地址进行类比IP地址的表示五类IP地址的地址范围IP地址的…...
【Linux】外接硬盘管理
查看外接硬盘信息 连接外接硬盘后,使用以下命令识别设备: lsblk:列出块设备及其挂载点 lsblk示例输出可能显示设备名称如 /dev/sdb。 通过 lsblk -f 可同时显示文件系统类型和 UUID。 fdisk -l:列出所有磁盘的分区信息ÿ…...
【Hadoop】详解Zookeeper选主流程
1. ZooKeeper 的工作原理 Zookeeper 的核心是Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。 为了保证事务的顺序一致性,Zookeeper采用了递增的事务id号(zxid)来标识事务。所有…...
C语言-语法
数据类型 字符串 C中字符串拼接不用+号,直接使用空格。 char* str = "hello" "world"; 换行链接,加上\就不会报错 char* longStr = "00000000000000000000000000000\ 00000000000000000000000000000"; typedef C 语言提供了 typedef …...
Flink Forward Asia 2024 大会 内容整理
一、Flink 2.0:十年磨一剑,开启流计算新纪元 作为 Flink 诞生十周年的重磅更新,Flink 2.0 被定位为“面向未来十年的流计算引擎”,核心目标是解决云原生、AI 融合、存算效率等新时代挑战。以下是它的几大杀手锏: 1. …...
golang进阶知识专项-理解值传递
在 Go 语言中,所有函数的参数传递都是值传递(Pass by Value)。当你将一个变量作为参数传递给函数时,实际上传递的是该变量的副本,而不是变量本身。理解这一点对于避免常见的编程错误至关重要。根据不同的类型ÿ…...
2020年联考《申论》第三题(河北县级卷)
材料: 总面积不过八平方米的店铺,摆满货品之后,两人在店内走动都有些困难,但这家小店在当地却是小有名气的老字号。69岁的店主老林是资深木雕艺人,更被称为“最后的手工酸枝筷子传人”。手工木筷取材自缅甸坤甸木、老挝…...
Kali WebDAV 客户端工具——Cadaver 与 Davtest
1. 工具简介 在 WebDAV 服务器管理和安全测试过程中,Cadaver 和 Davtest 是两款常用的命令行工具。 Cadaver 是一个 Unix/Linux 命令行 WebDAV 客户端,主要用于远程文件管理,支持文件上传、下载、移动、复制、删除等操作。Davtest 则是一款…...
八点八数字科技:开启数字人应用的无限可能
在数字科技飞速发展的时代,八点八数字科技凭借卓越实力,成为行业的领军者。自 2014 年成立,公司汇聚近百位顶尖人才,手握 30 新型发明专利与 80 软件著作权,完成数千万融资,实力备受认可。其自主研发的全…...
Vue 使用 vue-router 时,多级嵌套路由缓存问题处理
Vue 使用 vue-router 时,多级嵌套路由缓存问题处理 对于三级菜单(或多级嵌套路由),vue 都是 通过 keep-alive 组件来实现路由组件的缓存。 有时候三级或者多级路由时,会出现失效情况。以下是三级菜单缓存的例子。 最…...
《实战AI智能体》Deepseek可以做什么?自然语言理解与分析
在人工智能技术快速迭代的今天,Deepseek凭借其先进的自然语言处理能力,正在重塑人机交互的边界。本文将从技术实现维度,深入解析该平台在自然语言理解、知识推理与文本分类三大核心领域的技术突破与应用实践。 一、深度语义理解引擎 Deepseek构建了多层级的语义解析架构,实…...
虚拟主机认证功能
一.认证功能 类型: 1.基于客户端地址的认证 2.基于用户的认证 1.基于客户端地址的认证 nginx是一款模块化软件,功能都是基于模块实现的。 如上图所示,访问认证是使用的这个access_module模块。 这个模块也给我们提供了一些指令…...
BGP协议深度解析:从背景到术语的全面梳理
引言 在复杂的网络架构中,不同自治系统(AS)之间的路由交互至关重要。BGP(Border Gateway Protocol,边界网关协议)作为自治系统间的动态路由协议,承担着跨 AS 路由传递的关键任务。本文将深入探讨…...
初步认识线程
概念 一个线程就是一个 "执行流",每一个线程之间都可以按照顺序执行自己的代码,多个线程之间可以 "同步" 执行多份代码 比如说,原本一个人做的事情,现在交给三个人一起做,那么这三个人就是线程 使用原因 那么为什么要有线程呢?我们直接使用进程不可以…...