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

【C++】数据结构 单链表的实现(企业存储用户数据的实现)

本篇博客给大家带来的是用C++语言来实现数据结构的单链表(企业存储用户数据的实现)

🐟🐟文章专栏:C++

🚀🚀若有问题评论区下讨论,我会及时回答

❤❤欢迎大家点赞、收藏、分享

你们的支持就是我创造的动力!!

今日思想:岁岁平,岁岁安,岁岁平安!

 一、单链表的定义

        单链表是线性表(具体说明:在附录有链接)的一种,逻辑结构:是线性的,物理结构:不一定是线性的。

二、单链表结构体的实现

        我们先创建三个文件(test.c,SList.h,SList.c)其中test.c文件是对单链表的各种实现方法的测试,本文不详细测试。

        我们在文件SList.h定义结构体的实现,重定义int类型是为了根据用户的数据类型来定义。

data是用户的数据,next指向下一个结构体的地址(地址不连续),我们可以通next找到下一个结点的内容。我们可以把单链表的形成是一辆火车如图(以下的所有方法来源这张图):

代码实例: 

//SList.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>//定义链表的结构
//定义结点的结构typedef int SLTDataType;
typedef struct SListNode
{SLTDataType data;struct SListNode* next;//存储下一个结点(火车结点)的地址
}SLTNode;

三、单链表插入或者删除用户数据的方法实现

        ①打印链表的实现(用于观察代码的实现是否错误)

        我们先手动构造一个链表当然我们要实现的单链表是不用一个个手动构造的,构造的目的:测试打印链表的代码实现是否错误。

        手动构造链表的代码实现:

//test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"SList.h"
//手动构造一个链表
void test01()
{SLTNode* node1 = (SLTNode*)malloc(sizeof(SLTNode));SLTNode* node2 = (SLTNode*)malloc(sizeof(SLTNode));SLTNode* node3 = (SLTNode*)malloc(sizeof(SLTNode));SLTNode* node4 = (SLTNode*)malloc(sizeof(SLTNode));node1->data = 1;node2->data = 2;node3->data = 3;node4->data = 4;node1->next = node2;node2->next = node3;node3->next = node4;node4->next = NULL;SLTNode* plist = node1;
}int main()
{test01();return 0;
}

        代码解析:node1,node2等就是一节一节的车厢,如图:

        打印链表的代码实现: 

//SList.h
//打印链表
void SLTPrint(SLTNode* phead);//phead头结点
//SList.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"SList.h"
//打印链表
void SLTPrint(SLTNode* phead)
{SLTNode* pcur = phead;while (pcur != NULL){printf("%d -> ", pcur->data);pcur = pcur->next;}printf("NULL\n");
}

        我们在test.c文件调用上面这个函数,代码如下:

//test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"SList.h"
//手动构造一个链表
void test01()
{SLTNode* node1 = (SLTNode*)malloc(sizeof(SLTNode));SLTNode* node2 = (SLTNode*)malloc(sizeof(SLTNode));SLTNode* node3 = (SLTNode*)malloc(sizeof(SLTNode));SLTNode* node4 = (SLTNode*)malloc(sizeof(SLTNode));node1->data = 1;node2->data = 2;node3->data = 3;node4->data = 4;node1->next = node2;node2->next = node3;node3->next = node4;node4->next = NULL;SLTNode* plist = node1;SLTPrint(plist);//node是一个地址,只要通过next就能找到下一个结点。
}

        链表的打印如图:

        ②尾插(在最后一个结点前插入一个结点) 

         从这里开始我们就不用手动构造链表了,那么我们怎么创建结点呢??在后面的各种方法我们只要插入数据就会自动申请一个结点,即调用一下SLTNode* SLTBuyNode(SLTDataType x)函数,不用手动构造结点。

        创建结点的代码实现(因为申请结点在SList.c中申请):

//SList.c
//向操作系统申请一个新结点
SLTNode* SLTBuyNode(SLTDataType x)//x;用户的data(数据)
{SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));//判断是否创建结点成功if (newnode == NULL){//创建失败perror("malloc fail!");exit(1);}//成功newnode->data = x;//存储用户数据newnode->next = NULL;return newnode;
}

        在尾插数据之前我们要先申请一个结点

        尾插代码实例:

//SList.h
//尾插
void SLTPushBack(SLTNode* pphead,SLTDataType x);
//SList.c
//尾插
void SLTPushBack(SLTNode** pphead, SLTDataType x)//在test.c文件调用这个函数时我们传址调用,原因我们要改变整个链表的构造,不是改值,所以这里用二级指针来接收
{assert(pphead);SLTNode* newnode = SLTBuyNode(x);//链表为空,phead直接指向newnode结点if (*pphead == NULL){*pphead = newnode;}else{//链表不为空,找尾结点,将尾结点和新结点连接起来SLTNode* ptail = *pphead;while (ptail->next)//等价于ptail->next!=NULL;{ptail = ptail->next;}ptail->next = newnode;}
}

        ③头插(在第一个结点前插入用户的数据)

        代码实例:

//SList.h
//头插
void SLTPushFront(SLTNode** pphead, SLTDataType x);

       只要关于插入数据必须申请结点

//SList.c
//头插
void SLTPushFront(SLTNode** pphead, SLTDataType x)
{assert(pphead);//判断是否为空链表SLTNode* newnode = SLTBuyNode(x);newnode->next = *pphead;*pphead = newnode;
}

        ④尾删(删除最后一个结点)

        代码实例:

//SList.h
//尾删
void SLTPopBack(SLTNode** pphead);
//SList.c
//尾删
void SLTPopBack(SLTNode** pphead)
{assert(pphead && *pphead);//特殊情况:只有一个节点的时候if ((*pphead)->next == NULL){free(*pphead);*pphead = NULL;}else//多个结点{SLTNode* prev = NULL;SLTNode* ptail = *pphead;//不改变*pphead的值的情况下,找到最后一个链表while (ptail->next)//找最后一个结点{prev = ptail;ptail = ptail->next;}prev->next = NULL;free(ptail);//释放最后一个链表的空间ptail = NULL;}
}

        ⑤头删(删除第一个结点)

        代码实例:

//SList.h
//头删
void SLTPopFront(SLTNode** pphead);
//SList.c
//头删
void SLTPopFront(SLTNode** pphead)
{assert(pphead && *pphead);SLTNode* next = (*pphead)->next;//->的优先级高于*free(*pphead);//释放第一个结点*pphead = next;//此时第二个结点就是第一个结点
}

        ⑥查找用户是否存在x的值

        代码实例:

//SList.h
//查找是否存在用户x的值
SLTNode* SLTFind(SLTNode* phead, SLTDataType x);
//SList.c
//查找
SLTNode* SLTFind(SLTNode* phead, SLTDataType x)//传值调用,不改变链表
{SLTNode* pcur = phead;while (pcur){if (pcur->data == x){return pcur;//如果有用户x的值返回存储x的结点的地址}pcur = pcur->next;}return NULL;//没有返回空指针
}

        ⑦在指定位置之前插入数据

        代码实例:

//SList.h
//在指定位置之前插入数据
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x);
//SList,c
//在指定位置之前插入数据
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x)//pos是个地址,在这个地址前插入数据
{SLTNode* newnode = SLTBuyNode(x);//申请新结点assert(pphead && pos);if (pos == *pphead)//判断pos是否是第一个地址,如果是那就是头插{//头插SLTPushFront(pphead, x);}else{SLTNode* prev = *pphead;//防止*pphead不指向首地址while (prev->next != pos){prev = prev->next;}newnode->next = pos;prev->next = newnode;}
}

        ⑧在指定位置之后插入数据

        代码实例:

//SList.h
//在指定位置之后插入数据
void SLTInsertAfert(SLTNode* pos, SLTDataType x);
//SList.c
//在指定位置之后插入数据
void SLTInsertAfert(SLTNode* pos, SLTDataType x)
{assert(pos);SLTNode* newnode = SLTBuyNode(x);newnode->next = pos->next;//pos->next存储的下一个结点的地址,把新创建结点的next指向pos->next就行pos->next = newnode;//把新创建的结点的地址给pos->next
}

        ⑨删除pos结点

        代码实例:

//SList.h
//删除pos结点
void SLTErase(SLTNode** pphead, SLTNode* pos);
//SList.c
//删除pos结点
void SLTErase(SLTNode** pphead, SLTNode* pos)//pos是个地址,删除pos这个地址的结点
{assert(pphead && pos);if (pos == *pphead)//判断pos是否是头结点的地址,如果是就是头删{SLTPopFront(pphead);//头删的函数调用(上面有)}else{SLTNode* prev = *pphead;//防止改变头结点的地址while (prev->next != pos){prev = prev->next;}prev->next = pos->next;free(pos);pos = NULL;}
}

        ⑩删除pos之后的结点

        代码实例:

//SList.h
//删除pos之后的结点
void SLTEraseAfter(SLTNode* pos);
//SList.c
//删除pos之后的结点
void SLTEraseAfter(SLTNode* pos)//pos是个地址,删除pos这个地址的结点后面的结点
{assert(pos && pos->next);SLTNode* del = pos->next;//del是pos后面的结点的地址pos->next = del->next;//del->next相当于pos->next->next,先把del的next的地址给pos->next,再释放delfree(del);//释放pos后面结点的空间,就是deldel = NULL;
}

        11.销毁链表

        代码实例:

//SList.h
//销毁链表
void SListDestroy(SLTNode** pphead);
//SList.c
//销毁链表(把链表的各个结点的空间释放)
void SListDestroy(SLTNode** pphead)
{assert(pphead);SLTNode* pcur = *pphead;while (pcur)//分别把各个结点的空间释放{SLTNode* next = pcur->next;free(pcur);pcur = next;}*pphead = NULL;
}

 完!!

附录

【C++】数据结构 顺序表的实现(详解)_数据结构c++实现-CSDN博客

相关文章:

【C++】数据结构 单链表的实现(企业存储用户数据的实现)

本篇博客给大家带来的是用C语言来实现数据结构的单链表&#xff08;企业存储用户数据的实现&#xff09; &#x1f41f;&#x1f41f;文章专栏&#xff1a;C &#x1f680;&#x1f680;若有问题评论区下讨论&#xff0c;我会及时回答 ❤❤欢迎大家点赞、收藏、分享 你们的支持…...

【Vue3+ts入门小试牛刀】

Vue 3是一个流行的JavaScript框架&#xff0c;它提供了创建交互式用户界面的工具。Vite是一个现代化的构建工具&#xff0c;用于快速构建Vue应用。TypeScript是一种类型安全的JavaScript的超集&#xff0c;它可以帮助我们在开发过程中减少错误。 下面是一个使用Vue 3、Vite和T…...

AI发展新态势:从技术突破到安全隐忧

AI安全的新挑战 近期AI领域出现了令人担忧的新发现。根据最新研究,AI模型已经开始展现出策略性欺骗的倾向。具体表现在以下几个方面: 策略性欺骗行为的出现 在实验中发现,当研究人员试图让AI执行一些"反Anthropic"的操作时(如获取模型权限和外部服务器访问),模…...

肝功能不正常可以过教师入职体检吗?

如何看肝功能报告单 转氨酶正常等于肝功能正常吗?要想看懂肝功能报告单就要看懂各指标含义。 1、总胆红素TbiL正常值是 1.7-17.1μmol/L 急性黄疸型肝炎活动性肝炎肝坏死、肝癌、胰头癌都异常偏高。 2、直接胆红素 DbiL正常值是 0-6.84μmol/L 结石病、肝癌、胰头癌与这项…...

二百八十二、ClickHouse——删除Linux中的ClickHouse

一、目的 由于ClickHosue的库表发生变化&#xff0c;需要删除原有的表结构数据&#xff0c;才能直接把脚本里文件重新安装 二、删除步骤 1、关闭ClickHouse服务 systemctl stop clickhouse-server 2、卸载ClickHouse软件包 sudo yum remove clickhouse-server clickhouse…...

Disruptor 高性能环形消息框架

官方文档&#xff1a;Disruptor 1. 简介 Disruptor是一个高性能的互进程&#xff08;Inter-process&#xff09;和多线程&#xff08;Multi-threaded&#xff09;消息处理库&#xff0c;由LMAX交易所开发&#xff0c;用于在Java虚拟机&#xff08;JVM&#xff09;上实现高性能…...

青少年编程与数学 02-005 移动Web编程基础 05课题、rem布局与媒体查询

青少年编程与数学 02-005 移动Web编程基础 05课题、rem布局与媒体查询 一、rem单位1. 定义和计算2. 应用场景3. 优点4. 缺点5. 实现响应式布局的方案 二、媒体查询基本语法常用媒体类型常用表达式示例 三、less基本语法主要特性编译和使用总结 四、less嵌套1. 使用媒体查询2. 嵌…...

SuperMap iClient3D for Cesium等高线标注

kele 前言 在三维地形分析中&#xff0c;等高线分析是一种非常重要的分析方法&#xff0c;它能直观的表达出地形的高低起伏特征&#xff0c;在三维系统中受到广泛应用。在SuperMap iClient3D for Cesium中&#xff0c;等高线分析是前端GPU分析&#xff0c;能够分析并渲染出等高…...

HTTP状态码

1xx 信息响应类 表示接收到请求并继续处理。 100 Continue - 客户端应继续发送请求。101 Switching Protocols - 客户端请求服务器切换协议版本。 2xx 成功响应类 表示操作成功被接收、理解并处理。 200 OK - 请求成功&#xff0c;服务器已将所请求的资源返回给客户端。201…...

纯div+css+js弹出窗

目的&#xff1a;实现弹出窗、仅关闭弹窗之后才能操作。自适应宽度与高度、当文本内容太多时、添加滚动条效果。 效果图 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport"…...

python如何使用RSA加密,避免明文密码

如果在python脚本中出现明文密码&#xff0c;就不符合安全的需求&#xff0c;而md5加密又不够安全&#xff0c;推荐RSA加密&#xff0c;原理不多说&#xff0c;直接说怎么弄 首先执行这个函数&#xff0c;生成公钥和私钥并写入文件 #pip3 install pycryptodome from Crypto i…...

easegen将教材批量生成可控ppt课件方案设计

之前客户提出过一个需求&#xff0c;就是希望可以将一本教材&#xff0c;快速的转换为教学ppt&#xff0c;虽然通过人工程序脚本的方式&#xff0c;已经实现了该功能&#xff0c;但是因为没有做到通用&#xff0c;每次都需要修改脚本&#xff0c;无法让客户自行完成所有流程&am…...

通过远程控制软件实现企业高效协作

在这个信息技术迅猛发展的时代&#xff0c;远程办公已经成为一种趋势&#xff0c;而远程控制软件则是连接分散团队的重要工具。技术的革新不仅推动了远程控制软件的广泛应用&#xff0c;也为现代办公带来了高效的协作体验。本文将探讨远程控制软件的发展&#xff0c;并以RayLin…...

交换机与路由器的区别

交换机和路由器是网络中的两种关键设备&#xff0c;它们各自承担不同的功能&#xff0c;主要区别体现在以下几个方面&#xff1a; 一、工作层次与功能 交换机&#xff1a; 工作层次&#xff1a;交换机主要工作在OSI模型的第二层&#xff0c;即数据链路层。 功能&#xff1a;交…...

每天40分玩转Django:Django国际化

Django国际化 一、今日学习内容概述 学习模块重要程度主要内容国际化基础⭐⭐⭐⭐⭐基本概念、配置设置字符串翻译⭐⭐⭐⭐⭐翻译标记、消息文件模板国际化⭐⭐⭐⭐模板标签、过滤器动态内容翻译⭐⭐⭐⭐模型字段、表单翻译 二、国际化基础配置 # settings.py# 启用国际化 …...

游戏开发-UE4高清虚幻引擎教程

简介 Unreal Engine 4 相关教程&#xff0c;涵盖美术流程、独立游戏制作编程、虚拟现实实战、高级材质系统、蓝图可视化编程及进阶、RPG 游戏与特效开发、VR 交互虚拟漫游等方面。包含大量视频教程、工程文件及源码&#xff0c;如 UE4 零基础美术教程中有火焰材质等案例及模型…...

信号与系统基础知识3:小波变换

信号与系统基础知识3&#xff1a;小波变换 一、本文内容与前置知识点1. 本文内容2. 前置知识点 二、小波变换介绍1. 一个变化忽快忽慢的信号&#xff08;1&#xff09;DFT的频谱数据信息&#xff08;2&#xff09;DFT的漏掉的频谱数据信息 2. 小波变换-时域和频域之间的妥协&am…...

memory泄露分析方法(Binder,Window,View篇)

View泄露&#xff1a;从Hprof找大量重复的view&#xff0c;点击查看text文案如果相同则找产品他们确认是否合理 window泄露&#xff1a;代码或dumpsys window来监测是否有大量同名window&#xff0c;不能用windowtoken来辨别是否重复window&#xff0c;每个window token都不一样…...

如何阻止盗版软件在互联网上传播

阻止公司软件的盗版传播是一项复杂但重要的任务&#xff0c;可以通过技术、法律和管理手段相结合来实现。以下是一些有效的措施&#xff1a; 1. 技术措施 1.1 软件保护 使用软件加密&#xff1a;采用强大的代码混淆、加密技术和反篡改机制。硬件绑定&#xff1a;将软件激活与…...

设计模式--装饰器模式【结构型模式】

设计模式的分类 我们都知道有 23 种设计模式&#xff0c;这 23 种设计模式可分为如下三类&#xff1a; 创建型模式&#xff08;5 种&#xff09;&#xff1a;单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。结构型模式&#xff08;7 种&#xff09;&#xff1…...

CTFHUB-web进阶-php

我们用蚁剑中的这个插件来做这些关卡 一.LD_PRELOAD 发现这里有一句话木马&#xff0c;并且把ant给了我们&#xff0c;我们直接连接蚁剑 右键 选择模式&#xff0c;都可以试一下&#xff0c;这里第一个就可以 点击开始 我们进入到目录&#xff0c;刷新一下&#xff0c;会有一个…...

谷歌开发者工具 - 网络篇

Chrome DevTools - Network网络篇 一、官网二、主要用途三、网络篇1.网络工具栏&#xff08;1&#xff09;网络活动&#xff08;2&#xff09;保留日志&#xff08;3&#xff09;网络状况&#xff08;4&#xff09;网络设置 2.搜索和过滤&#xff08;1&#xff09;搜索&#xf…...

量子退火与机器学习(1):少量数据求解未知QUBO矩阵,以少见多

文章目录 前言ー、复习QUBO&#xff1a;中药配伍的复杂性1.QUBO 的介入&#xff1a;寻找最佳药材组合 二、难题&#xff1a;QUBO矩阵未知的问题1.为什么这么难&#xff1f; 三、稀疏建模(Sparse Modeling)1. 欠定系统中的稀疏解2. L1和L2的选择&#xff1a; 三、压缩感知算法(C…...

JDK高频面试题(包重点)

一、什么是JDK JDK&#xff08;Java Development Kit&#xff09;即 Java 开发工具包&#xff0c;是 Java 编程的基础与核心&#xff0c;由 Sun Microsystems&#xff08;现归属于 Oracle 公司 &#xff09;开发&#xff0c;主要作用如下&#xff1a; 1、提供编译环境 它包含了…...

本地部署 LLaMA-Factory

本地部署 LLaMA-Factory 1. 本地部署 LLaMA-Factory2. 下载模型3. 微调模型3-1. 下载数据集3-2. 配置参数3-3. 启动微调3-4. 模型评估3-5. 模型对话3-6. 导出模型3-7. 使用 vllm 推理 1. 本地部署 LLaMA-Factory 下载代码&#xff0c; git clone https://github.com/hiyouga/…...

内置ALC的前置放大器D2538A/D3308

一、概述 D2538A/D3308是芯谷科技推出的带有ALC&#xff08;自动电平控制&#xff09;的前置音频放大器芯片&#xff0c;最初产品为单声道/立体声收录机及盒式录音机而开发&#xff0c;作为录音/回放的磁头放大器使用&#xff1b;由于产品的高增益、低噪声及ALC外部可调的特性&…...

20241227解决使用向日葵远程工具连接ubuntu20.04.5出现黑屏的问题

20241227解决使用向日葵远程工具连接ubuntu20.04.5出现黑屏的问题 2024/12/27 14:40 参考资料&#xff1a; 百度&#xff1a;先日葵 https://sunlogin.oray.com/ 贝锐向日葵 百度&#xff1a;向日葵 连接 ubuntu22.04.5 黑屏 https://blog.csdn.net/catssi/article/details/139…...

Thinkphp 使用workerman消息实现消息推送完整示例

1.版本说明&#xff1a;ThinkPHP6.0 、PHP8.0 2.实现原理 应用场景&#xff0c;监听用户登陆&#xff0c;修改用户登陆状态&#xff0c;通过心跳时间计算用户是否下线&#xff0c;其他应用场景自行修改逻辑即可。 第一步&#xff1a;安装workerman composer require topthin…...

Word论文交叉引用一键上标

Word论文交叉引用一键上标 1.进入Microsoft word使用CtrlH快捷键或单击替换按钮 2.在查找内容中输入[^#] 3.鼠标点击&#xff0c;标签为“替换为&#xff1a;”的文本框&#xff0c;注意光标一定要打在图红色方框圈中的文本框中&#xff01; 4.点击格式选择字体 5.勾选上标…...

使用vue3搭建前端模拟增删改查

主要工具 vue3 element-plus axios mockjs 使用mockjs模拟数据 import Mock from "mockjs"; // 内存模拟数据 const arr []; for (let i 0; i < 10; i) {arr.push({id: Mock.mock("id"),name: Mock.mock("cname"),place: Mock.mock("c…...

Stream API 的设计融合了多个经典设计模式

Stream API 的设计融合了多个经典设计模式&#xff1a; 1. 策略模式&#xff08;Strategy Pattern&#xff09; 策略模式定义了一个算法的家族&#xff0c;将每个算法封装起来&#xff0c;并使它们可以互换。Stream API 中的每个操作&#xff08;如 filter(), map()&#xff…...

京东零售数据可视化平台产品实践与思考

导读 本次分享题目为京东零售数据可视化平台产品实践与思考。 主要包括以下四个部分&#xff1a; 1. 平台产品能力介绍 2. 业务赋能案例分享 3. 平台建设挑战与展望 作者&#xff1a;梁臣 京东 数据产品架构师 01平台产品能力介绍 1. 产品矩阵 数据可视化产品是一种利用…...

mysql高频面试题

1. mysql里的索引类型 2. 聚簇索引和非聚簇索引的区别 聚簇索引适合场景: 主键、唯一性要求高的字段。需要对数据进行范围查询时。对数据的读取频繁,并且数据行的插入和删除较少时。非聚簇索引适合场景: 较多的查询条件,或者需要基于某些非主键字段进行查询时。需要创建多个…...

MySQL中Performance Schema库的详解(下)

昨天说了关于SQL语句相关的&#xff0c;今天来说说性能相关的&#xff0c;如果没有看过上篇请点传送门https://blog.csdn.net/2301_80479959/article/details/144693574?fromshareblogdetail&sharetypeblogdetail&sharerId144693574&sharereferPC&sharesource…...

算法day_7 算法练习

这是我在2024年12月25日的算法练习&#xff0c;加油&#xff01;(▽) 题目一 &#x1f4aa; 1337. 矩阵中战斗力最弱的 K 行 已解答 | 简单 题目描述 &#x1f4dd; 给你一个大小为 m * n 的矩阵 mat&#xff0c;矩阵由若干军人和平民组成&#xff0c;分别用 1 和 0 表示。…...

一文详解MacOS+CLion——构建libtorch机器学习开发环境

对于希望在本地环境中进行深度学习开发的开发者来说&#xff0c;配置合适的工具链是至关重要的一步。本文旨在帮助您在 macOS 操作系统上&#xff0c;利用 CLion IDE 和 PyTorch 的 C依赖库——libtorch&#xff0c;快速搭建起一个高效的开发环境。这里我们将一步步地讲解如何下…...

CSS系列(39)-- Shapes详解

前端技术探索系列&#xff1a;CSS Shapes详解 ✨ 致读者&#xff1a;探索形状布局的艺术 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 CSS Shapes&#xff0c;这个强大的形状布局特性。 基础形状 &#x1f680; 圆形与椭圆 /* 基础圆形 */ .circle {widt…...

kafka的备份策略:从备份到恢复

文章目录 一、全量备份二、增量备份三、全量恢复四、增量恢复 前言&#xff1a;Kafka的备份的单元是partition&#xff0c;也就是每个partition都都会有leader partiton和follow partiton。其中leader partition是用来进行和producer进行写交互&#xff0c;follow从leader副本进…...

Android着色器SweepGradient渐变圆环,Kotlin

Android着色器SweepGradient渐变圆环&#xff0c;Kotlin import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.Path import android.graphics.SweepGradient import android…...

SQL 实战:聚合函数高级用法 – 多层分组与动态统计

在数据分析中&#xff0c;聚合函数如 COUNT()、SUM()、AVG()、MAX()、MIN() 等是最常用的工具之一。它们允许我们对大量数据进行汇总和统计。然而&#xff0c;随着业务需求的复杂化&#xff0c;我们常常需要进行更复杂的统计操作&#xff0c;例如多层次的分组统计、动态分组等。…...

从零创建一个 Django 项目

1. 准备环境 在开始之前&#xff0c;确保你的开发环境满足以下要求&#xff1a; 安装了 Python (推荐 3.8 或更高版本)。安装 pip 包管理工具。如果要使用 MySQL 或 PostgreSQL&#xff0c;确保对应的数据库已安装。 创建虚拟环境 在项目目录中创建并激活虚拟环境&#xff…...

Spring Boot 3.4新特性:RestClient和RestTemplate的重大更新详解

本文将深入探讨Spring Boot 3.4版本中关于RestClient和RestTemplate的重要更新。。 1. 背景介绍 在Spring生态系统中&#xff0c;HTTP客户端一直是一个重要的组件。从最早的RestTemplate&#xff0c;到WebClient&#xff0c;再到现在的RestClient&#xff0c;每一次演进都带来…...

ANSYS EMC Plus:谐振腔中的天线

概述 本博客说明了如何使用 EMA3D 和 MHARNESS 模拟工具来模拟腔内天线产生的电场。下面简要概述了完成模拟所需的步骤&#xff0c;视频链接中提供了完整的演示。 步骤1&#xff1a;定义模拟域 准备模拟的第一步是定义模拟域。该域应包含所有需要分析的几何图形。在此演示中…...

lv_ffmpeg学习及播放rtsp

lvgl8.3有ffmpeg支持 FFmpeg support typedef struct {lv_img_t img;lv_timer_t * timer;lv_img_dsc_t imgdsc;bool auto_restart;struct ffmpeg_context_s * ffmpeg_ctx; } lv_ffmpeg_player_t;typedef enum {LV_FFMPEG_PLAYER_CMD_START,LV_FFMPEG_PLAYER_CMD_STOP,LV_FFMP…...

Java前端基础—HTML

Java前端基础—HTML 目录 Java前端基础—HTML1.简介2.基础语法2.1HTML页面固定结构2.2标题标签2.3段落标签2.4换行标签2.5水平线标签2.6文本标签2.7图片标签2.8音频标签2.9视频标签2.10链接标签2.11列表标签2.12表格标签2.13表单标签2.14语义标签 1.简介 1.网页组成&#xff1…...

salesforce 控制 Experience Cloud 站点用户可以看到哪些用户

在 Salesforce 的 Experience Cloud 中&#xff0c;您可以通过多种方式控制站点用户&#xff08;如社区用户&#xff09;之间的可见性。这包括用户之间的信息可见性以及他们可以访问的其他用户数据。以下是几种方法和设置&#xff0c;用于实现对 Experience Cloud 站点用户可见…...

C语言实现尼科彻斯定理

1.题目&#xff1a; 2.分析 【1】怎么输出连续奇数&#xff1a;下面是输出m个连续奇数的代码 #include<stdio.h>int main(){int m,x;scanf("%d",&m);for(int i0;i<m:i){printf("%d",x);xx2;}return 0; } 【2】啥叫尼科彻斯定理&#xff1f;…...

【Ubuntu添加右键wine运行exe程序文件】

【前提】你在Ubuntu中安装了wine 【效果展示】右键在打开方式中显示用wine运行 以bilibli安装包为例&#xff0c;在B站安装包右键选择打开方式 省去了在终端中输入wine命令 【步骤】如何添加右键wine运行exe程序文件 新建一个文本文档 其中填入以下内容 [Desktop Entry]…...

7. Linux网络服务配置全面指南

本章目录&#xff1a; 引言7. 网络服务配置7.1 DNS服务器配置安装BIND配置区域文件创建区域文件测试与重启DNS服务示例图&#xff1a;DNS解析流程 7.2 Web服务器部署&#xff08;Apache/Nginx&#xff09;Apache与Nginx的选择安装Apache示例&#xff1a;部署静态网站安装Nginx配…...

深入探讨 Nginx 性能优化:从基础到高级的最佳实践

目录 引言Nginx 性能优化的意义Nginx 性能优化的主要方向系统层面的优化 4.1 优化操作系统的文件描述符4.2 调整 TCP 参数4.3 使用高效的磁盘 I/O 调度器 Nginx 配置优化 5.1 优化 worker 进程和连接数5.2 使用异步和非阻塞 I/O 模式5.3 配置 Gzip 压缩5.4 开启缓存和缓存控制…...