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

嵌入式学习笔记 D20 :单向链表的基本操作

  • 单向链表的创建
  • 单向链表的插入
  • 单向链表的删除及清空
  • 单向链表的修改
  • 单向链表的查找
  • 单向链表的逆序

一、单向链表的创建

LinkList *CreateLinkList() {LinkList *ll = malloc(sizeof(LinkList));if (NULL == ll) {fprintf(stderr, "CreateLink malloc");return NULL;}ll->head = NULL;ll->clen = 0;return ll;
}

判断链表是否为空:

int IsEmptyLinkList(LinkList *ll)
{return 0 == ll->clen;
}

获取链表长度:

int GetSizeLinkList(LinkList *ll)
{return ll->clen;
}

遍历链表并输出:

int ShowLinkList(LinkList *ll)
{LinkNode *tmp = ll->head;int len = GetSizeLinkList(ll);int i ;for(i = 0 ; i < len ; ++i){printf("%s %c %d %d\n",tmp->data.name,tmp->data.sex,tmp->data.age,tmp->data.score);tmp = tmp->next;}return 0;
}

二、单向链表的插入

1.头插法:

int InsertHeadLinkList(LinkList *ll, DATATYPE *data)
{LinkNode *newnode = malloc(sizeof(LinkNode));if (NULL == newnode) {fprintf(stderr, "InsertHeadLinkList malloc");return 1;}memcpy(&newnode->data,data,sizeof(DATATYPE));//memcpy(&newnode->data,data,sizeof(DATATYPE));newnode->next = NULL;if(IsEmptyLinkList(ll)){ll->head = newnode;}else{newnode->next = ll->head;ll->head = newnode;}ll->clen++;return 0;
}

2.尾插法:

int InsertTailLinkList(LinkList *ll, DATATYPE *data)
{if(IsEmptyLinkList(ll)){return InsertHeadLinkList(ll,data);}else{LinkNode *newnode = malloc(sizeof(LinkNode));if (NULL == newnode) {fprintf(stderr, "InsertTailLinkList malloc");return 1;}memcpy(&newnode->data,data,sizeof(DATATYPE));//memcpy(&newnode->data,data,sizeof(DATATYPE));newnode->next = NULL;LinkNode *tmp1 = ll->head;while(tmp1->next){tmp1 = tmp1->next;}tmp1->next = newnode;ll->clen++;}return 0;
}

3.指定位置插入(重点掌握)

int InsertPosLinkList(LinkList *ll, DATATYPE *data, int pos)
{int len = GetSizeLinkList(ll);if(pos < 0 || pos > len){return 1;}if(0 == pos){return InsertHeadLinkList(ll, data); //cha ru 1 ge jie dian malloc 2 ci hui xie lou nei cun}else if(len == pos){return InsertTailLinkList(ll, data);}else{LinkNode *newnode = malloc(sizeof(LinkNode));if (NULL == newnode) {fprintf(stderr, "InsertPosLinkList malloc");return 1;}memcpy(&newnode->data,data,sizeof(DATATYPE));newnode->next = NULL;int i = 0;LinkNode *tmp = ll->head;while(tmp->next){++i;if(i == pos){newnode->next = tmp->next;tmp->next = newnode;break;}tmp = tmp->next;}ll->clen++;}return 0;
}

三、单向链表的删除及清空

1.单向链表的删除(指定名字对应的结点)

int DeleteLinkList(LinkList *ll,char *name)
{LinkNode *tmp = ll->head;if(IsEmptyLinkList(ll)){return 1;}if(0 == strcmp(tmp->data.name,name)){ll->head = ll->head->next;free(tmp);ll->clen--;return 0;}while(tmp->next){if (0 == strcmp(tmp->next->data.name,name)){LinkNode *tmp2 = tmp->next;tmp->next = tmp->next->next;free(tmp2);ll->clen--;return 0;}tmp = tmp->next;}return 1;
}

2.单向链表的清空:

int DestroyLinkList(LinkList **ll)
{LinkNode *tmp = (*ll)->head;while(tmp){if(NULL == tmp){break;}(*ll)->head = (*ll)->head->next;free(tmp);tmp = (*ll)->head;}free(*ll);*ll = NULL;return 0;
}

四、单向链表的修改

int ModifyLinkList(LinkList *ll,char *name,DATATYPE *data)
{DATATYPE *tmp = FindLinkList(ll,name);if(NULL == tmp){return 1;}memcpy(tmp, data, sizeof(DATATYPE));return 0;
}

五、单向链表的查找

1.查找指定姓名的数据域

DATATYPE *FindLinkList(LinkList *ll,char *name)
{LinkNode *tmp = ll->head;while(tmp){if(0 == strcmp(tmp->data.name,name)){return &tmp->data;}tmp = tmp->next;}return NULL;
}

2.查找链表的中间结点位置

LinkNode *Findmiddleofpoint(LinkList *ll)
{LinkNode *slow = ll->head;LinkNode *fast = ll->head;while(fast){fast = fast->next;if(fast == NULL ){break;}slow = slow->next;fast = fast->next;}return slow;
}

3.查找链表中倒数第k个结点位置

LinkNode *Findlastofpoint(LinkList *ll, int k)
{if(IsEmptyLinkList(ll)){return NULL;}if(k > ll->clen || k <= 0){return NULL;}LinkNode *slow = ll->head;LinkNode *fast = ll->head;int i;for (i = 0; i < k;++i){fast = fast->next;}while(fast){fast = fast->next;slow = slow->next;}return slow;
}

六、单向链表的逆序

int InverseLinkList(LinkList *ll)
{if(IsEmptyLinkList(ll)){return 1;}int len = GetSizeLinkList(ll);if( 1 == len){return 0;}LinkNode *prev = NULL;LinkNode *tmp = ll->head;LinkNode *next = ll->head->next;while(1){tmp->next = prev;prev = tmp;tmp = next;if(NULL == tmp){break;}next = next->next;}ll->head = prev;return 0;
}

总结:

        单向链表的优点:插入和删除的时间复杂度为O(1),优于顺序表。且在空间性能上不需要预先分配,大小可变,能够动态分配满足要求。

        单向链表的缺点:查找的时间复杂度为O(n)。

相关文章:

嵌入式学习笔记 D20 :单向链表的基本操作

单向链表的创建单向链表的插入单向链表的删除及清空单向链表的修改单向链表的查找单向链表的逆序 一、单向链表的创建 LinkList *CreateLinkList() {LinkList *ll malloc(sizeof(LinkList));if (NULL ll) {fprintf(stderr, "CreateLink malloc");return NULL;}ll…...

瀑布模型VS敏捷模型VS喷泉模型

​目录 ​​1. 瀑布模型(Waterfall Model)​​ ​​2. 敏捷模型(Agile Model)​​ ​​3. 喷泉模型(Fountain Model)​​...

Android usb网络共享详解

Android usb网络共享详解 文章目录 Android usb网络共享详解一、前言二、USB网络共享使用的前提1、Android设备支持adb 并且打开usb开关2、原生Settings能看到USB网络共享开关3、代码中检测USB网络共享是否支持 三、Settings 中USB网络共享代码的部分代码1、Settings\res\xml\t…...

在线黑白图像转换:简单却强大的视觉表达工具

为什么选择黑白图像&#xff1f; 在这个色彩缤纷的数字世界中&#xff0c;黑白摄影却始终保持着其独特的魅力。黑白图像消除了色彩的干扰&#xff0c;让我们更专注于构图、纹理和形式的表达。这种经典的转换技术能够创造出富有情感和强烈对比的视觉作品&#xff0c;呈现出彩色…...

python 异步执行测试

1. 并行执行机制 子进程级并行&#xff1a;通过 asyncio.create_subprocess_exec 启动的每个外部命令&#xff08;如 python run_spider.py&#xff09;会创建一个独立的系统进程&#xff0c;由操作系统直接调度&#xff0c;实现真正的并行执行。 协程级并发&#xff1a;主程序…...

《Python星球日记》 第69天:生成式模型(GPT 系列)

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、GPT简介&#xff1a;从架构到原理1. GPT的架构与工作原理2. Decoder-only结…...

STM32 之网口资源

1 网口资源介绍 STM32F407 是 STMicroelectronics 推出的高性能 ARM Cortex-M4 微控制器&#xff0c;具备多种外设接口&#xff0c;其中包括一个 Ethernet MAC 控制器&#xff08;带 IEEE 1588 支持&#xff09;。这意味着你可以使用 STM32F407 实现网络通信功能&#xff08;通…...

一分钟在Cherry Studio和VSCode集成火山引擎veimagex-mcp

MCP的出现打通了AI模型和外部数据库、网页API等资源&#xff0c;成倍提升工作效率。近期火山引擎团队推出了 MCP Server SDK&#xff1a; veimagex-mcp。本文介绍如何在Cherry Studio 和VSCode平台集成 veimagex-mcp。 什么是MCP MCP&#xff08;Model Context Protocol&…...

业务中台-典型技术栈选型(微服务、容器编排、分布式数据库、消息队列、服务监控、低代码等)

在企业数字化中台建设中&#xff0c;业务中台是核心支撑平台&#xff0c;旨在通过技术手段将企业核心业务能力抽象、标准化和复用&#xff0c;以快速响应前端业务需求。其核心技术流涉及从业务抽象到服务化、治理和持续优化的全流程。以下是业务中台建设中的核心技术体系及关键…...

图像颜色理论与数据挖掘应用的全景解析

文章目录 一、图像颜色系统的理论基础1.1 图像数字化的本质逻辑1.2 颜色空间的数学框架1.3 量化过程的技术原理 二、主要颜色空间的深度解析2.1 RGB颜色空间的加法原理2.2 HSV颜色空间的感知模型2.3 CMYK颜色空间的减色原理 三、图像几何属性与高级特征3.1 分辨率与像素密度的关…...

从规则驱动到深度学习:自然语言生成的进化之路

自然语言生成技术正经历着人类文明史上最剧烈的认知革命。这项起源于图灵测试的技术&#xff0c;已经从简单的符号操作演变为具备语义理解能力的智能系统。当我们回溯其发展历程&#xff0c;看到的不仅是算法模型的迭代更新&#xff0c;更是一部人类认知自我突破的史诗。这场革…...

影刀RPA网页自动化总结

1. 影刀RPA网页自动化概述 1.1 定义与核心功能 影刀RPA网页自动化是一种通过软件机器人模拟人类操作网页行为的技术&#xff0c;旨在提高网页操作效率、减少人工干预。其核心功能包括&#xff1a; 网页数据抓取&#xff1a;能够高效抓取网页上的数据&#xff0c;如电商数据、…...

[:, :, 1]和[:, :, 0] 的区别; `prompt_vector` 和 `embedding_matrix`的作用

prompt_vector = torch.sum(prompt_embedding * attention_weights.unsqueeze(-1), dim=1) # [1, hidden_dim] prompt_vector = torch.sum(prompt_embedding * attention_weights.unsqueeze(-1), dim=1) 主要作用是通过将 prompt_embedding 与 attention_weights 相乘后再按指…...

LeetCode 题解 41. 缺失的第一个正数

41. 缺失的第一个正数 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 解释&#xff1a;范围 [1,…...

3337. 字符串转换后的长度 II

3337. 字符串转换后的长度 II # 定义了一个大质数 MOD&#xff0c;用于取模运算&#xff0c;防止数值溢出。 MOD 1_000_000_007# 矩阵乘法 mul def mul(a:List[List[int]], b:List[List[int]]) -> List[List[int]]:# 输入两个矩阵 a 和 b&#xff0c;返回它们的矩阵乘积 a…...

基于 TensorFlow 框架的联邦学习可穿戴设备健康数据个性化健康管理平台研究

基于 TensorFlow 框架的联邦学习可穿戴设备健康数据个性化健康管理平台研究 摘要: 随着可穿戴设备的普及,人们对于自身健康管理的需求日益增长。然而,可穿戴设备所收集的健康数据往往分散在不同用户的设备中,且涉及用户隐私敏感信息。本研究旨在构建一个基于 TensorFlow 框…...

查看字节真实二进制形式示例解析1

查看字节的真实二进制形式&#xff1f; 若需要显式查看二进制0/1&#xff0c;可以通过以下方法转换&#xff1a; 方法1&#xff1a;逐字节转换为二进制字符串 def bytes_to_binary(data: bytes) -> str:return .join([bin(byte)[2:].zfill(8) for byte in data])# 示例 …...

hadoop中spark基本介绍

Spark是一个基于内存计算的快速、通用、可扩展的大数据处理引擎&#xff0c;可与Hadoop集成并在其生态系统中发挥重要作用。以下是其基本介绍&#xff1a; 特点 - 快速&#xff1a;基于内存计算&#xff0c;能将中间结果缓存在内存中&#xff0c;避免频繁读写磁盘&#xff0c;大…...

Apollo学习——键盘控制速度

# keyboard_control.py import time import keyboard # 键盘输入模块 pip install keyboard from getkey import getkey, keys from cyber.python.cyber_py3 import cyber_time from cyber.python.cyber_py3 import cyber from modules.common_msgs.control_msgs import contro…...

无人机数据处理与特征提取技术分析!

一、运行逻辑 1. 数据采集与预处理 多传感器融合&#xff1a;集成摄像头、LiDAR、IMU、GPS等传感器&#xff0c;通过硬件时间戳或PPS信号实现数据同步&#xff0c;确保时空一致性。 边缘预处理&#xff1a;在无人机端进行数据压缩&#xff08;如JPEG、H.265&#xff09;…...

Java内存马的检测与发现

【网络安全】Java内存马的检测与发现 一、Java内存马的现象二、检测思路三、重点关注类四、检测方法1. 检查方法&#xff08;FindShell&#xff09;2. 检查方法&#xff08;sa-jdi&#xff09;3. 检查方法&#xff08;arthas-boot&#xff09;4. 检查方法&#xff08;cop.jar&a…...

基于策略的强化学习方法之策略梯度(Policy Gradient)详解

在前文中&#xff0c;我们已经深入探讨了Q-Learning、SARSA、DQN这三种基于值函数的强化学习方法。这些方法通过学习状态值函数或动作值函数来做出决策&#xff0c;从而实现智能体与环境的交互。 策略梯度是一种强化学习算法&#xff0c;它直接对策略进行建模和优化&#xff0c…...

未来软件开发趋势与挑战

未来软件开发的方向将受到技术进步、市场需求和社会变革的多重影响。以下是可能主导行业发展的关键趋势&#xff1a; 1. AI与自动化深度整合 AI代码生成&#xff1a;GitHub Copilot等工具将进化成"AI开发伙伴"&#xff0c;能理解业务逻辑并自动生成完整模块。自修复…...

【vue】生命周期钩子使用

一、详解 created&#xff1a;实例化完成还没有渲染 mounted&#xff1a;渲染完成 二、应用 在created之后获取网络请求&#xff0c;封装成函数&#xff0c;在需要的地方直接调用函数...

【CTFShow】Web入门-信息搜集

Web1 好长时间没刷题了&#xff0c;第一眼看到的时候有点儿手足无措 在信息搜集中最常用的手段就是直接查看源代码&#xff0c;所以直接F12大法吧&#xff0c;果不其然拿到了flag Web2 题目给了提示js前台拦截 无效操作 打开题看到界面还是一脸茫然 坏了&#xff0c;这波貌似…...

Go 语言 net/http 包使用:HTTP 服务器、客户端与中间件

Go 语言标准库中的net/http包十分的优秀&#xff0c;提供了非常完善的 HTTP 客户端与服务端的实现&#xff0c;仅通过几行代码就可以搭建一个非常简单的 HTTP 服务器。几乎所有的 go 语言中的 web 框架&#xff0c;都是对已有的 http 包做的封装与修改&#xff0c;因此&#xf…...

YOLO v2:目标检测领域的全面性进化

引言 在YOLO v1取得巨大成功之后&#xff0c;Joseph Redmon等人在2016年提出了YOLO v2&#xff08;也称为YOLO9000&#xff09;&#xff0c;这是一个在准确率和速度上都取得显著提升的版本。YOLO v2不仅保持了v1的高速特性&#xff0c;还通过一系列创新技术大幅提高了检测精度…...

卓力达红外热成像靶标:革新军事训练与航空检测的关键技术

引言 红外热成像技术凭借其非接触、无辐射、全天候工作的特性&#xff0c;已成为现代军事和航空领域的重要工具。南通卓力达研发的**自发热红外热成像靶标**&#xff0c;通过创新设计与制造工艺&#xff0c;解决了传统训练器材的痛点&#xff0c;并在军事和航空应用中展现出显…...

【生产实践】Dolphinscheduler集群部署后Web控制台不能登录问题解决

太长不看版 问题描述&#xff1a; Dolphinscheduler按生产手册使用一键脚本集群部署后&#xff0c;控制台登录页面可以打开&#xff0c;但使用默认账户怎么都登录不进去&#xff0c;尝试在数据库中清理登录用户字段&#xff0c;发现数据库中并没有相关用户字段&#xff0c;而后…...

Shell和Bash介绍

Shell是硬件和软件之间的交互界面。Bash是一种shell&#xff0c;在Linux系统中比较常见。我目前使用的Mac用的Z shell(zsh). 可以在terminal里面通过zsh命令对系统进行操作。这是与Windows所见所得&#xff0c;用鼠标点相比&#xff0c;Mac和Linux都可以完全用命令操作。常用的…...

数据 分析

应用统计和计算方法,识别数据特征与规律. 1 分析方法 1.1 描述性分析 总结和呈现数据的基本特征;特点是简单直观. 1.1.1 集中趋势分析 ①均值:数据总和除以数据个数,反映数据的平均水平;特点是易受极端值影响;用于了解整体平均情况,例如计算班级学生平均成绩. ②中位数:将数…...

纯css实现蜂窝效果

<!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>蜂窝效果</title><style>body {margin: 0…...

用PyTorch在超大规模下训练深度学习模型:并行策略全解析

我猜咱们每个人肯定都累坏了&#xff0c;天天追着 LLM 研究社区跑&#xff0c;感觉每天都冒出个新的最牛模型&#xff0c;把之前的基准都给打破了呢。要是你好奇为啥创新速度能这么快&#xff0c;那主要就是研究人员能够在超大规模下训练和验证模型啦&#xff0c;这全靠并行计算…...

linux-进程信号捕捉

1. 信号捕捉流程 操作系统会在合适的时候处理信号&#xff0c;那这个合适的时候是什么时候呢&#xff1f;进程从内核态返回到用户态的时候。 假如用户程序注册了 SIGQUIT 信号的处理函数 sighandler。当程序正在执行 main 函数时&#xff0c;如果发生中断、异常或系统调用&…...

【免杀】C2免杀技术(三)shellcode加密

前言 shellcode加密是shellcode混淆的一种手段。shellcode混淆手段有多种&#xff1a;加密&#xff08;编码&#xff09;、偏移量混淆、UUID混淆、IPv4混淆、MAC混淆等。 随着杀毒软件的不断进化&#xff0c;其检测方式早已超越传统的静态特征分析。现代杀软往往会在受控的虚…...

人工智能驱动的临床路径体系化解决方案与实施路径

引言 临床路径管理作为现代医疗质量管理的重要工具,其核心在于通过标准化诊疗流程来提升医疗服务的规范性、一致性和效率。然而,传统临床路径管理面临路径设计僵化、执行依从性低、变异管理滞后等诸多挑战,亟需借助人工智能技术实现转型升级。本研究旨在探讨如何通过构建系…...

旋变信号数据转换卡 旋变解码模块 汽车永磁同步电机维修工具

旋变信号数据转换卡&#xff0c;是一款专门针对与永磁同步电机的旋变编码器和 BRX 型旋转变压器编码器进行旋变信号解码转换串行总线协议的专用转换卡。此款转换卡结合了专用的旋变信号解码芯片解码逻辑处理&#xff0c;解码信号分辨率高、线性度高、响应速度快。板卡采用工业级…...

RPM 包制作备查 SRPM 包编译

&#x1f308; 个人主页&#xff1a;Zfox_ 目录 &#x1f525; 前言 一&#xff1a;&#x1f525; 准备 二&#xff1a;&#x1f525; 制作 rpm 1.设置目录结构&#xff08;制作车间&#xff09;2. 源码放置到规划好的目录当中3. 创建一个spec文件&#xff0c;指挥如何使用这些…...

[学习] RTKLib详解:rtcm2.c、rtcm3.c、rtcm3e与rtcmn.c

RTKLib详解&#xff1a;rtcm2.c、rtcm3.c、rtcm3e与rtcmn.c 本文是 RTKLlib详解 系列文章的一篇&#xff0c;目前该系列文章还在持续总结写作中&#xff0c;以发表的如下&#xff0c;有兴趣的可以翻阅。 [学习] RTKlib详解&#xff1a;功能、工具与源码结构解析 [学习]RTKLib详…...

MCU ESP32-S3+SD NAND(贴片式T卡):智能皮电手环(GSR智能手环)性能与存储的深度评测

在智能皮电手环与数据存储领域&#xff0c;主控MCU ESP32-S3FH4R2 与 存储SD NAND MKDV2GIL-AST 的搭档堪称行业新典范。二者深度融合低功耗、高速读写、SMART 卓越稳定性等核心优势&#xff0c;以高容量、低成本的突出特性&#xff0c;为大规模生产场景带来理想的数据存储方案…...

股指期货套期保值怎么操作?

股指期货套期保值就是企业或投资者通过持有与其现货市场头寸相反的期货合约&#xff0c;来对冲价格风险的一种方式。换句话说&#xff0c;就是你在股票市场上买了股票&#xff08;现货&#xff09;&#xff0c;担心股价下跌会亏钱&#xff0c;于是就在期货市场上卖出相应的股指…...

Pytorch的Dataloader使用详解

PyTorch 的 DataLoader 是数据加载的核心组件&#xff0c;它能高效地批量加载数据并进行预处理。 Pytorch DataLoader基础概念 DataLoader基础概念 DataLoader是PyTorch基础概念 DataLoader是PyTorch中用于加载数据的工具&#xff0c;它可以&#xff1a;批量加载数据&#xf…...

Ros2 - Moveit2 - DeepGrasp(深度抓握)

本教程演示了如何在 MoveIt 任务构造器中使用抓握姿势检测 (GPD)和 Dex-Net 。 GPD&#xff08;左&#xff09;和 Dex-Net&#xff08;右&#xff09;用于生成拾取圆柱体的抓取姿势。 https://moveit.picknik.ai/main/_images/mtc_gpd_panda.gif 入门 如果您还没有这样做&am…...

【DRAM存储器五十一】LPDDR5介绍--CK、WCK、RDQS单端模式、Thermal Offset、Temperature Sensor

👉个人主页:highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 参考资料:《某LPDDR5数据手册》 、《JESD209-5C》 目录 CK、WCK、RDQS单端模式 Thermal Offset Temperature Sensor...

【springcloud学习(dalston.sr1)】Eureka 客户端服务注册(含源代码)(四)

d该系列项目整体介绍及源代码请参照前面写的一篇文章【springcloud学习(dalston.sr1)】项目整体介绍&#xff08;含源代码&#xff09;&#xff08;一&#xff09; 这篇文章主要介绍Eureka客户端服务注册到eureka的server端。 上篇文章【springcloud学习(dalston.sr1)】Eurek…...

数据结构 栈和队列

文章目录 &#x1f4d5;1.栈(Stack)✏️1.1 栈的基本操作✏️1.2 栈的模拟实现&#x1f516;1.2.1 构造方法&#x1f516;1.2.2 扩容方法&#x1f516;1.2.3 判断栈是否为空或是否满&#x1f516;1.2.4 存储元素&#x1f516;1.2.5 删除元素&#x1f516;1.2. 6 获取栈顶元素 ✏…...

[数据结构]5. 栈-Stack

栈-Stack 1. 介绍2. 栈的实现2.1 基于链表的实现2.2 基于数组的实现 3. 栈操作CreateInitilizateDestoryPushPopTopEmptySize 1. 介绍 栈&#xff08;stack&#xff09; 是一种遵循先入后出逻辑的线性数据结构。顶部称为“栈顶”&#xff0c;底部称为“栈底”。把元素添加到栈…...

Git的安装和配置(idea中配置Git)

一、Git的下载和安装 前提条件&#xff1a;IntelliJ IDEA 版本是2023.3 &#xff0c;那么配置 Git 时推荐使用 Git 2.40.x 或更高版本 下载地址&#xff1a;CNPM Binaries Mirror 操作&#xff1a;打开链接 → 滚动到页面底部 → 选择2.40.x或更高版本的 .exe 文件&#xf…...

QT-1.信号与槽

一、信号与槽机制概述 四、信号与槽的连接 六、自定义信号与槽 思考 定义与作用 &#xff1a;信号与槽是Qt中的核心通信机制&#xff0c;用于实现对象间的数据交互和事件处理。当特定事件发生时&#xff0c;对象会发出信号&#xff0c;而与之相连的槽函数会被自动调用。 特点 …...

常用的应用层网络协议对比

概述 协议通信模式加密支持传输层主要特点典型应用场景WSS全双工是&#xff08;TLS/SSL&#xff09;TCP安全的实时双向通信实时聊天、在线游戏WebSocket (WS)全双工否TCP持久连接、低延迟协同编辑、实时通知HTTPS请求-响应是&#xff08;TLS/SSL&#xff09;TCP安全性强、兼容…...