当前位置: 首页 > news >正文

数据结构学习之链表学习:单链表

        在之前顺序表的学习过程中,我们知道顺序表中头插和中插的复杂度是O(N)。那我们可不可以将其降低为O(1)呢?可不可以不增容想用就用想扔就扔而不会浪费一点空间呢?那就是我们今天的内容:链表

        继我们学习了顺序表之后,接下来我们就来学习顺序表的下一个内容:链表。

目录

链表

单链表

        单链表的组成

       创建单链表的新节点

        单链表的尾插

        单链表的头插

       单链表的尾删

        单链表的头删

        单链表的查找

        单链表插入数据

        指定位置之前

        指定位置之后

单链表删除数据 

        指定结点

        指定节点之后

         单链表的结点数据修改

        单链表的销毁


链表

        链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是链表中指针链接次序的实现

        那么链表是如何实现的呢?

        以火车为例,火车的车头和车厢并不是粘连在一起的,而是通过连接起来的,可以增减车厢的个数。每个车厢是独立存在的,增减某一元素对原有数据不影响

        再单链表中“车厢”就是结点,而单链表就是由结点构成的。

        而由于上图可知,结点是由数据元素及保存下一个结点地址的指针组成的。

        接下来我们来学习单链表的实现。

单链表

        我们需要三个文件来准备

SList.h——声明结构体的组成、声明函数方法

SList.c——实现函数

test.c——单链表测试

        单链表的组成

typedef int SListDataType;
//定义链表结构——节点
typedef struct SListNode
{SListDataType data;//保存的数据struct SListNode* next;//指向下一个节点的指针
}SLN;

        单链表的打印函数

SList.h

//链表的打印
void SLN_print(SLN* next);

SList.c

//链表的打印
void SLN_print(SLN* phead)
{SLN* p = phead;while(p!= NULL)//可以简写为while(p){printf("%d ->", p->data);p = p->next;}printf("NULL\n");
}

       创建单链表的新节点

//根据x创建节点
SLN* SLN_buy_node(SListDataType x)
{//根据x创建结点SLN* new_node = (SLN*)malloc(sizeof(SLN));if (new_node == NULL){perror("malloc error");return  1;}new_node->data = x;new_node->next = NULL;return new_node;
}

        单链表的尾插

        前面我们知道链表是依赖于指针连接起来的,所以我们创建一个空链表是这样的

//创建一个空链表
SLN* slist =NULL;

        因此,我们进行尾插的时候分为两种情况:链表为空和链表不为空

        链表为空时,直接将新结点赋值给首结点;不为空时,从前往后走,当指针不为空时向后走,当指针为空的时候跳出循环,插入结点,尾部节点指针为NULL。

        代码为:

//链表的尾插
void SLN_back_push(SLN** pphead, SListDataType x)
{SLN* new_node = SLN_buy_node(x);//链表为空if (*pphead == NULL){*pphead = new_node;}else{//找尾结点SLN* ptail = *pphead;while (ptail->next){ptail = ptail->next;}//找到尾结点ptail->next = new_node;}
}

        单链表的头插

        头插思路:

        

//链表的头插
void SLN_head_push(SLN** pphead, SListDataType x)
{assert(pphead!=NULL);SLN* new_node = SLN_buy_node(x);new_node->next = *pphead;*pphead = new_node;
}

       单链表的尾删

//链表的尾删
void SLN_back_pop(SLN** pphead)
{assert(pphead!= NULL&&*pphead!= NULL);//找prev和ptailSLN*prev = NULL;SLN*ptail = *pphead;//找尾结点while (ptail->next != NULL){prev = ptail;ptail=ptail->next;}prev->next = NULL;free(ptail);ptail = NULL;
}

但是这段代码当链表只有一个结点的时候就会出错, 

        单链表的头删

void SLN_head_pop(SLN** pphead)
{assert(pphead != NULL && *pphead != NULL);SLN*next=(*pphead)->next;free(*pphead);*pphead=next;
}

        单链表的查找

//链表的查找
SLN* SLN_find(SLN* pphead, SListDataType x)
{SLN*p=pphead;while (p != NULL){if (p->data == x){printf("find %d\n", x);return p;}p = p->next;}return NULL;
}

        单链表插入数据

        指定位置之前

        思路图:

        prev的指针指向newcode的数值,newcode的next指针指向pos 

        代码:

//指定位置之前插入
void SLN_Before_insert(SLN** pphead, SLN* pos, SListDataType x) 
{assert(pphead != NULL && pos != NULL);// pos 是头节点,执行头插if (pos == *pphead) {SLN_head_push(pphead, x);}else {SLN* newnode = SLN_buy_node(x);// 找pos的前一个结点SLN * prev = *pphead;while (prev->next != pos){prev = prev->next;}	//prev--> newnode--> pos prev->next = newnode;prev->next = newnode;newnode->next = pos;}
}

        指定位置之后

思路图:

        

        只需要将pos的next指针指向newcode,将nextcode的next指针指向下一个数据,即以下这种情况:

newcode->next=pos->next;
pos->next=newcode;

代码:

//指定位置之后插入
void SLN_After_insert( SLN* pos, SListDataType x)
{assert(pos);SLN* newnode = SLN_buy_node(x);newnode->next = pos->next;pos->next = newnode;	
}

单链表删除数据 

        指定结点

        思路:

        

//指定结点删除
void SLN_delete(SLN** pphead, SLN* pos)
{assert(pphead&&pos);//pos是第一个节点if (pos==*pphead){SLN_head_pop(pphead);}else{SLN* prev = *pphead;while (prev->next != pos){prev = prev->next;}prev->next = pos->next;free(pos);pos = NULL;}	
}

        指定节点之后

//指定位置之后插入
void SLN_After_insert( SLN* pos, SListDataType x)
{assert(pos);SLN* newnode = SLN_buy_node(x);newnode->next = pos->next;pos->next = newnode;	
}

         单链表的结点数据修改

//链表的数据修改
void SLN_change(SLN** pphead, SLN* pos, SListDataType x)
{assert(pos);pos->data = x;
}

        单链表的销毁

//链表的销毁
void SLN_destroy(SLN** pphead)
{SLN* p = *pphead;while (p != NULL){SLN*next=p->next;free(p);p=next;}*pphead = NULL;
}

        本期单链表的内容到此结束,后续我们会就单链表的问题进行一些题目的练习,或者学习其他的链表结构。在这里求个赞,谢谢

相关文章:

数据结构学习之链表学习:单链表

在之前顺序表的学习过程中,我们知道顺序表中头插和中插的复杂度是O(N)。那我们可不可以将其降低为O(1)呢?可不可以不增容想用就用想扔就扔而不会浪费一点空间呢?那就是我们今天的内容&#xff1…...

技术债务积累,如何进行有效管理

识别和评估技术债务、明确技术债务的优先级、制定系统的还债计划、持续监控与预防技术债务产生是有效管理技术债务积累的重要策略。其中尤其要注重识别和评估技术债务,只有准确识别技术债务的种类和严重程度,才能制定出高效且有针对性的解决方案&#xf…...

[20250514] 脑机接口行业调研报告(2024年最新版)

脑机接口行业调研报告(2024年最新版) 1. 调研报告 2. 相关企业...

【​​HTTPS基础概念与原理​】​​SSL/TLS协议演进史:从SSLv3到TLS 1.3

以下是 SSL/TLS协议演进史 的详细解析,从SSLv3到TLS 1.3,涵盖各版本的核心特点、重大漏洞及淘汰原因: 1. SSLv3(Secure Sockets Layer 3.0) • 发布时间:1996年(Netscape开发) • 核…...

JVM 与云原生的完美融合:引领技术潮流

最近佳作推荐: Java 大厂面试题 – 揭秘 JVM 底层原理:那些令人疯狂的技术真相(New) Java 大厂面试题 – JVM 性能优化终极指南:从入门到精通的技术盛宴(New) Java 大厂面试题 – JVM 深度剖析&…...

【进程控制二】进程替换和bash解释器

【进程控制二】进程替换 1.exec系列接口2.execl系列2.1execl接口2.2execlp接口2.3execle 3.execv系列3.1execv3.2总结 4.实现一个bash解释器4.1内建命令 通过fork创建的子进程,会继承父进程的代码和数据,因此本质上还是在执行父进程的代码 进程替换可以将…...

如何查看打开的 git bash 窗口是否是管理员权限打开

在 git bash 中输入: net session >nul 2>&1 && (echo Ok) || (echo Failed) 显示 OK 》是管理员权限; 显示 Failed 》不是管理员权限。 如何删除此步生成的垃圾文件: 新建一个 .txt 文件,输入以下代码…...

ubuntu 22.04 wifi网卡配置地址上网

通过network-manager配置 确定是否存在usb网卡的驱动 rootgpu-server:/etc/netplan# lsmod | grep rt2800usbrt2800usb 32768 0rt2x00usb 24576 1 rt2800usbrt2800lib 139264 1 rt2800usbrt2x00lib 73728 3 rt2800us…...

让 Cursor 教我写 MCP Client

文章目录 1. 写在最前面2. 动手实现一个 MCP Client2.1 How 天气查询 Client2.1.1 向 Cursor 提问的艺术2.1.2 最终成功展示2.1.3 client 的代码 3. MCP 协议核心之一总结3.1 SSE vs WebSocket 4. 碎碎念5. 参考资料 1. 写在最前面 学习了 MCP Server 的实现后,刚好…...

GoogleTest:GMock2 EXPECT_CALL

GoogleTest:GMock初识-CSDN博客 简单的介绍了GMock工作的方式 GMock其实是比较复杂的,先上一个例子,然后再仔细的解读: //not_ready_class.hpp #include <string>class Person { public:virtual ~Person() = default;virtual std::string name() = 0;virtual int a…...

自注意力机制(Self-Attention)前向传播手撕

题目 实现Transformer中自注意力机制的前向传播代码 思路与代码 自注意力机制&#xff08;Self-Attention&#xff09;是自然语言处理和深度学习中的一种核心机制&#xff0c;最早在 Transformer 模型中被提出。它的核心思想是&#xff1a;让序列中的每个元素都能动态关注整个…...

华硕服务器-品类介绍

目录 一、核心产品线解析 1. 机架式服务器 2. 塔式服务器 3. 高密度计算服务器 二、关键技术与模组配置 1. 主板与管理模块 2. 电源与散热 3. 存储与网络 三、应用场景与行业解决方案 1. 人工智能与高性能计算 2. 云计算与虚拟化 3. 边缘计算与工业物联网 一、核心…...

【Ansible基础】Ansible设计理念与无代理架构深度解析

目录 1 Ansible概述与核心设计理念 1.1 Ansible的核心设计哲学 1.2 Ansible与其他配置管理工具的对比 2 Ansible无代理架构详解 2.1 无代理架构工作原理 2.2 无代理架构的优势 2.3 无代理架构的局限性 3 Ansible核心组件与架构 3.1 Ansible核心组件架构 组件说明&…...

利用vba替换word中多个表格,相邻单元格的文字

目录 一、效果图1、替换前2、替换后 二、敲代码1、开发者工具→vba编辑器&#xff0c;点击插入模块2、键入以下代码3、代码编辑完成后&#xff0c;开发者工具→运行宏&#xff0c;选择对应名称&#xff0c;运行 一、效果图 标题估计没说明白&#xff0c;上图 1、替换前 2、替…...

动态多因子策略

策略其核心思想是通过多种技术指标的结合&#xff0c;动态调整交易信号&#xff0c;以实现更精准的市场进出和风险管理。 交易逻辑思路 1. 初始化与数据更新&#xff1a; - 在每个Bar的开盘时&#xff0c;更新当日的最高价、最低价和收盘价。 - 计算短期和长期的移动平均线&…...

STC32G12K128实战:串口通信

STC32G12K128芯片写一个按键通过串口1发送字符串的程序。首先&#xff0c;确认芯片的串口1配置。STC32G系列通常使用UART1&#xff0c;相关的寄存器是P_SW1来选择引脚。默认情况下&#xff0c;UART1的TX是P3.1。 接下来是设置定时器作为波特率发生器。通常用定时器2&#xff0c…...

基于javaweb的SpringBoot高校图书馆座位预约系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

一种资源有限单片机处理cJSON数据的方法

一般单片机处理cJSON格式的数据都直接使用cJSON库&#xff0c;但对于Ram较小的单片机&#xff0c;由于资源有限&#xff0c;这并不合适&#xff0c;但我们可以根据cJSON数据的特定格式&#xff0c;使用土方法&#xff0c;直接对字符进行查找裁剪即可 //截取字符串str中字符a与…...

【2025版】Spring Boot面试题

文章目录 1. Spring, Spring MVC, SpringBoot是什么关系&#xff1f;2. 谈一谈对Spring IoC的理解3. Component 和 Bean 的区别&#xff1f;4. Autowired 和 Resource 的区别&#xff1f;5. 注入Bean的方法有哪些&#xff1f;6. 为什么Spring 官方推荐构造函数注入&#xff1f;…...

C++——类和对象(1)

文章目录 一、前言二、类和对象上2.1 类的定义2.1.1 定义格式一2.1.2 定义格式二2.1.3 注意点 2.2 访问限定符2.2.1 访问限定符的用法 2.3 类域2.4 类的实例化2.4.1 实例化的概念2.4.2 实例化具体举例2.4.3类的实例化对象大小 2.5 this指针2.5.1 this指针的概念2.5.6 this指针的…...

【行为型之观察者模式】游戏开发实战——Unity事件驱动架构的核心实现策略

文章目录 &#x1f3af; 观察者模式&#xff08;Observer Pattern&#xff09;深度解析一、模式本质与核心价值二、经典UML结构三、Unity实战代码&#xff08;玩家血量监控系统&#xff09;1. 定义观察者接口与主题基类2. 实现具体主题&#xff08;玩家血量&#xff09;3. 实现…...

Java基础语法之数组

数组 一、认识数组 1.什么是数组 数组就是一个容器&#xff0c;用来存一批同种类型的数据。 举例 20, 10, 80, 60, 90 int[] arr {20, 10, 80, 60, 90};张三, 李四, 王五 String[] names {"张三", "李四", "王五"};2.为什么要使用数组 假设…...

Vue3学习(组合式API——计算属性computed详解)

目录 一、计算属性computed。 Vue官方提供的案例。(普通写法与计算属性写法) 使用计算属性computed重构——>简化描述响应式状态的复杂逻辑。 &#xff08;1&#xff09;计算属性computed小案例。 <1>需求说明。&#xff08;筛选原数组——>得新数组&#xff09; &…...

高海拔和远距离的人员识别:面部、体型和步态的融合

大家读完就觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 我们解决了在无约束环境中进行全身人体识别的问题。这个问题出现在诸如IARPA高空和远距离生物识别与身份识别&#xff08;BRIAR&#xff09;计划等监视场景中&#xff0c;其中生物识别数据是在长…...

《P2345 [USACO04OPEN] MooFest G》

题目背景 P5094 [USACO04OPEN] MooFest G 加强版 题目描述 约翰的 n 头奶牛每年都会参加“哞哞大会”。 哞哞大会是奶牛界的盛事。集会上的活动很多&#xff0c;比如堆干草&#xff0c;跨栅栏&#xff0c;摸牛仔的屁股等等。 它们参加活动时会聚在一起&#xff0c;第 i 头…...

浅浅学:DoIP工作流程及基于DoIP的诊断/刷写工具

注&#xff1a;阅读本文需要对UDS及BootLoader有一定了解&#xff0c;基础内容不做赘述。 在汽车"新四化"浪潮的推动下&#xff0c;智能座舱、自动驾驶、车路协同等创新技术正加速重构行业格局。随着车载ECU数量突破百个量级&#xff0c;软件代码量呈指数级增长——…...

首个专业AI设计Agent发布-Lovart

Lovart是什么 Lovart 是为设计师打造的世界上首个专业设计 Agent。Lovart 能像专业设计师一样思考和执行设计任务&#xff0c;提供高水平的设计方案。基于自然语言交互&#xff0c;用户能快速调整布局、颜色和构图。Lovart 支持从创意拆解到专业交付的全链路设计&#xff0c;单…...

二叉树(中序遍历)

嘿&#xff0c;欢迎来到小巫blog&#xff01;小巫又来啦&#xff01;看到你对二叉树中序遍历这道题有点困惑&#xff0c;别担心&#xff0c;我会一步步带你搞定它&#xff01;这道题是树的基础题目&#xff0c;掌握了它&#xff0c;你对树的遍历就会有很深的理解。我相信&#…...

Ubuntu 系统默认已安装 python,此处只需添加一个超链接即可

步骤 1&#xff1a;确认 Python 3 的安装路径 查看当前 Python 3 的路径&#xff1a; which python3 输出类似&#xff1a; /usr/bin/python3 步骤 2&#xff1a;创建符号链接 使用 ln -s 创建符号链接&#xff0c;将 python 指向 python3&#xff1a; sudo ln -s /usr/b…...

AcroForm JavaScript Promise 对象应用示例: 异步加载PDF文件

这段代码演示了在Adobe Acrobat DC Pro 的 JavaScript 环境中如何使用 Promise 对象处理异步操作。具体功能是&#xff1a; 定义了一个loadFile函数&#xff0c;模拟异步加载PDF文件的操作使用Promise对象封装异步操作&#xff0c;提供成功(resolve)和失败(reject)两种状态通过…...

LeetCode 热题 100 114. 二叉树展开为链表

LeetCode 热题 100 | 114. 二叉树展开为链表 大家好&#xff0c;今天我们来解决一道经典的二叉树问题——二叉树展开为链表。这道题在 LeetCode 上被标记为中等难度&#xff0c;要求将二叉树展开为一个单链表&#xff0c;展开后的单链表应该与二叉树的先序遍历顺序相同。 问题…...

DML和DQL

1. 设置MySQL的储存引擎 上一章的附录里已经将ini设置好了&#xff0c;不用再次设置 2. DML语句 插入单数据记录 插入多数据记录 将查询结果插入新表 更新数据 删除数据 注意&#xff1a;delete删除只会删除数据&#xff0c;不会重置表的现有逻辑&#xff0c;truncate会重置表逻…...

多线程与线程互斥

我们初步学习完线程之后&#xff0c;就要来试着写一写多线程了。在写之前&#xff0c;我们需要继续来学习一个线程接口——叫做线程分离。 默认情况下&#xff0c;新创建的线程是joinable的&#xff0c;线程退出后&#xff0c;需要对其进行pthread_join操作&#xff0c;否则无法…...

BMS工具箱用来执行贝叶斯模型平均(BMA)计算模块

贝叶斯模型平均&#xff08;Bayesian Model Averaging&#xff0c;BMA&#xff09;是一种用于处理模型不确定性的统计方法&#xff0c;通过结合多个模型的预测结果来提高预测的准确性和鲁棒性。在 MATLAB 中&#xff0c;可以使用专门的工具箱&#xff08;如 BMS 工具箱&#xf…...

Java死锁排查:线上救火实战指南

想象一下&#xff0c;你正在值班&#xff0c;突然监控告警红成一片&#xff0c;用户反馈雪花般飘来&#xff1a;“系统卡死了&#xff01;用不了了&#xff01;” —— 这很可能就是Java应用遭遇了“死锁”这个大魔王。这时候&#xff0c;你就是救火队长&#xff0c;首要任务不…...

第十九次博客打卡

今天学习的内容是Java中的常见循环。 在 Java 中&#xff0c;常见的循环结构主要有以下几种&#xff1a;for 循环、while 循环、do-while 循环以及增强型 for 循环&#xff08;也称为 for-each 循环&#xff09;。 1. for 循环 for 循环是一种非常灵活的循环结构&#xff0c…...

智能体制作学习笔记1——智能体

01 智能体_哔哩哔哩_bilibili 大语言模型可以理解成一个很厉害的人。 但是要完成一些特定的工作&#xff0c;除了大语言模型&#xff0c;还需要一些工具和业务流程&#xff0c;这样才能自动化帮我们完成特定的工作&#xff0c;这个就叫做智能体。 突然发现放视频的时候出现了…...

Python常见问题

文章目录 1.python有哪些数据类型2.python中的元组和列表的区别是什么&#xff1f;3.python中的break、continue、pass代表什么意思&#xff1f;4.如何在python中生成一个随机数&#xff1f;5.Python有哪些常见的内置函数&#xff1f;6.请用自己最擅长的编程语言&#xff0c;将…...

小程序 存存上下滑动的页面

推荐阅读文档&#xff1a; Vue3组合式API之getCurrentInstance详解 - 且行且思 - 博客园Vue2中&#xff0c;可以通过this来获取当前组件实例&#xff1b; Vue3中&#xff0c;在setup中无法通过this获取组件实例&#xff0c;console.log(this)打印出来的值是undefined。 在Vue3…...

更换git位置并在pycharm中重新配置

更新 PyCharm 中的 Git 路径 更新 PyCharm 终端的 Shell 路径 检查环境变量 确保系统环境变量中的 Path 包含了新的 Git 安装路径 &#xff0c;如果使用unins0000自动卸载就不会有旧路径。...

AI世界的崩塌:当人类思考枯竭引发数据生态链断裂

AI世界的崩塌&#xff1a;当人类思考枯竭引发数据生态链断裂 ——论过度依赖AI创作对技术进化的反噬 一、数据生态的恶性循环&#xff1a;AI的“自噬危机” 当前AI模型的训练依赖于人类创造的原始数据——书籍、论文、艺术作品、社交媒体动态等。据统计&#xff0c;2025年全球…...

OkHttp连接池

&#x1f9f0; 调整连接池的核心参数 ✅ 最大空闲连接数&#xff08;maxIdleConnections&#xff09;&#xff1a; 含义&#xff1a;连接池中最多保留的空闲连接数量。默认值&#xff1a;5建议值&#xff1a;10~50&#xff08;视并发量而定&#xff09; ✅ 连接保持时间&…...

哈希表的实现01

文章目录 哈希表的实现01哈希概念直接定址法哈希冲突负载因子将关键字转换为整数 哈希函数除法散列法&#xff1a;乘法散列法&#xff08;了解&#xff09;全域散列法&#xff08;了解&#xff09; 处理哈希冲突&#xff08;开放定址法&#xff09;线性探测&#xff1a;二次探测…...

学习日志06 java

还有四天要去比赛了&#xff0c;能赢吗&#xff1f;逼自己一把。。。&#xff01;&#xff01;加油&#xff01; 1 对比一下java重写还是不重写tostring的区别 1. 不重写 toString() 的情况 java class Point {private int x;private int y;public Point(int x, int y) {th…...

spring中的@MapperScan注解详解

一、核心功能与作用 MapperScan是Spring与MyBatis框架集成时用于批量扫描Mapper接口的核心注解&#xff0c;其主要功能包括&#xff1a; 自动注册Mapper接口 通过指定包路径&#xff0c;Spring会自动扫描该路径下的所有Mapper接口&#xff0c;并将其注册为Spring Bean&#x…...

PYTHON训练营DAY25

BUG与报错 一、try else try:# 可能会引发异常的代码 except ExceptionType: # 最好指定具体的异常类型&#xff0c;例如 ZeroDivisionError, FileNotFoundError# 当 try 块中发生 ExceptionType 类型的异常时执行的代码 except: # 不推荐&#xff1a;捕获所有类型的异常&…...

视频图像压缩领域中 DCT 的 DC 系数和 AC 系数详解

引言 在数字图像与视频压缩领域&#xff0c;离散余弦变换&#xff08;Discrete Cosine Transform, DCT&#xff09;凭借其卓越的能量集中特性&#xff0c;成为JPEG、MPEG等国际标准的核心技术。DCT通过将空域信号映射到频域&#xff0c;分离出DC系数&#xff08;直流分量&…...

YOLO v1:目标检测领域的革命性突破

引言 在计算机视觉领域&#xff0c;目标检测一直是一个核心任务&#xff0c;它不仅要识别图像中的物体类别&#xff0c;还要确定物体的精确位置。传统目标检测方法如R-CNN系列虽然准确率高&#xff0c;但计算复杂度高、速度慢。2016年&#xff0c;Joseph Redmon等人提出的YOLO…...

AI智能体 | 使用Coze一键制作“假如书籍会说话”视频,18个作品狂吸17.6万粉,读书博主新标杆!(附保姆级教程)

目录 一、整体工作流设计 二、制作工作流 2.1 开始节点 2.2 大模型_生成对话文案 2.3 代码_字幕切割 2.4 画板_对话背景 2.5 循环_对话语音01 2.5.1 选择器_2 2.5.2 语音合成02 2.5.3 语音合成03 2.5.4 变量聚合_1 2.5.5 视频合成01 2.6 循环_3 2.6.1 选择器_3 …...

HVV蓝队实战面试题

HVV蓝队实战&#xff0c;防守筹备之“部署蜜罐捕获横向扫描行为”。 蜜罐通过模拟内网脆弱服务&#xff08;如SMB、SSH、数据库端口&#xff09;&#xff0c;诱捕攻击者突破边界后的横向探测行为。 通过监测高频端口扫描、非常规协议请求及非授权IP段遍历&#xff0c;结合多源…...