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

线性表——链式存储

单链表(有头结点)

#include<stdio.h>
#include<stdlib.h>
//定义
typedef struct LNode{int data;        //数据域 struct LNode *next;        //指针域指向下一个结点,所以是 struct LNode类型 
}LNode,*LinkList;        //*LinkList用于表示这是一个指向 struct LNode类型的指针 //初始化(有头结点),只分配一个头结点 
bool InitList(LinkList &L){            //LNode主要强调这是一个结点,而LinkList主要强调这是一个单链表,这里是对单链表进行初始化,所以参数最好使用LinkList L=(LNode *)malloc(sizeof(LNode));        //分配一个头结点的内存 if(L==NULL)        //内存不足,分配失败 return false;L->next=NULL;        //头结点后面暂时没有结点 return true; 
}//单链表的建立——尾插法
LinkList List_TailInsert(LinkList &L){//第一步:初始化一个单链表L=(LinkList)malloc(sizeof(LNode));    //建立头结点,注意这里强调是单链表,所以是LinkList类型 LNode *s,*r=L;        //s结点用于存储新元素,r结点为尾结点,永远指向最后一个结点int x;        //新元素scanf("%d",&x);        //输入新元素的值if(x!=999){            //当输入999时结束新元素插入 s=(LNode *)malloc(sizeof(LNode));        //为新节点分配内存if(s=NULL)        //内存分配失败 return NULL;s->data=x;r->next=s;r=s;scanf("%d",&x);        //输入新元素的值} r->next=NULL;        //注意不能忘记 return L;}//单链表的建立——头插法,与尾插法同理,只是不需要尾指针,因为头结点代替了他的作用
LinkList List_HeadInsert(LinkList &L){L=(LinkList)malloc(sizeof(LNode));L->next=NULL;LNode *s;int x;scanf("%d",&x);if(x!=999){s=(LNode *)malloc(sizeof(LNode));if(s=NULL)return NULL;s->data=x;s->next=L->next;L->next=s;scanf("%d",&x);}return L;
} //指定结点后插操作,在p结点后插入e 
bool InsertNextNode(LNode *p,int e) {if(p==NULL)return false;LNode *s=(LNode *)malloc(sizeof(LNode));    //分配内存 if(s==NULL)return false;        //内存分配失败s->data=e;s->next=p->next;p->next=s;return true;
}//按位查找,查找第i个元素 
LNode * GetElem(LinkList L,int i){if(i<0)return NULL;LNode *p;        //p指针用于指向当前扫描到的结点int j=0;         //j表示当前扫描到了第几个结点,开始是头结点——第0个结点p=L;            //p开始指向头结点 while(p!=NULL&&j<i){p=p->next;j++;} return p;
} //按值查找
LNode * LocateElem(LinkList L,int e){LNode *p=L->next;    //p指向第一个结点while(p!=NULL&&p->data!=e){p=p->next;} return p;} //插入,在位置i插入结点e ,采用封装思想 
bool ListInsert(LinkList &L,int i,int e){if(i<1)return false; //    LNode *p;        //p指针用于指向当前扫描到的结点
//    int j=0;        //j表示当前扫描到了第几个结点
//    p=L;        //p指针最初指向头结点 
//    if(p!=NULL&&j<i-1){        //找到并用p指向第i-1个结点 
//        p=p->next;
//        j++ ; 
//    } LNode *p=GetElem(L,i-1);         //找到第i-1个结点//    if(p==NULL)        //防止i>(链表长度+1) 
//        return false;
//        
//    LNode *s=(LNode *)malloc(sizeof(LNode));    //分配一个结点的内存
//    s->data=e;
//    s->next=p->next;
//    p->next=s;
//    return true; return InsertNextNode(p,e);            //再第i-1个结点后面插入e 
} //指定结点前插操作,在p结点前插入e 
bool InsertPriorNode(LNode *p,int e) {if(p==NULL)return false;LNode *s=(LNode *)malloc(sizeof(LNode));    //分配内存 if(s==NULL)return false;        //内存分配失败/*因为单链表是单向的,只有next指针,所以在进行前插操作时,先把e插入到p的后面,然后再交换二者的数据域 */s->next=p->next;p->next=s;s->data=p->data;p->data=e;return true;
}//按位删除,删除表L中第i个位置的元素,并用e返回删除元素的值 。核心:找到第i-1个元素 
bool ListDelete(LinkList &L,int i,int e){if(i<1)return false;LNode *p;    //指向当前扫描到的结点int j=0;        //当前扫描到第几个结点,头结点是第0个结点 p=L;        //p开始指向头结点(注意:头结点不存储数据)while(p!=NULL&&j<i-1){        //找第i-1个元素 p=p->next;j++;} if(p==NULL)return false;if(p->next==NULL)        //说明p是最后一个结点 return false;LNode *q=p->next;        //令q指向被删除的结点 e=q->data;                //用e返回删除元素的值p->next=q->next; free(q);return true;
} //删除指定结点p。核心:将p后面结点的数据域复制到p中,再将后面的结点删除 
bool DeleteNode(LNode *p){if(p=NULL)return false;LNode *q=p->next;p->data=p->next->data;p->next=q->next;free(q);return true;
} 
int main(){}

单链表(无头结点)

#include<stdio.h>
#include<stdlib.h>
//定义
typedef struct LNode{int data;        //数据域 struct LNode *next;        //指针域指向下一个结点,所以是 struct LNode类型 
}LNode,*LinkList;        //*LinkList用于表示这是一个指向 struct LNode类型的指针 //初始化 (无头结点) 
bool InitList(LinkList &L){L=NULL;        //空表,暂时没有任何结点 return true; 
} //按位查找
LNode * GetElem(LinkList L,int i){if(i<0)return NULL;LNode *p;int j=1;    //注意没有头结点所以初始值为1 p=L;while(p!=NULL&&j<i){p=p->next;j++; } return p;
} //按值查找
LNode * LocateElem(LinkList L,int e){LNode *p=L;    //p开始指向第一个结点 while(p!=NULL&&p->data!=e){p=p->next;}return p;
} //指定结点后插操作,在p结点后插入e 
bool InsertNextNode(LNode *p,int e) {if(p==NULL)return false;LNode *s=(LNode *)malloc(sizeof(LNode));    //分配内存 if(s==NULL)return false;        //内存分配失败s->data=e;s->next=p->next;p->next=s;return true;
}//插入,在位置i插入结点e 
bool ListInsert(LinkList &L,int i,int e){if(i<1)return false;if(i==1){    //使插入的结点成为头结点 LNode *s=(LNode *)malloc(sizeof(LNode));    //申请内存 s->data=e;s->next=L;L=s; return true;}//    LNode *p;
//    int j=1; 
//    p=L;        //p指向第一个结点,注意不是头结点 
//    
//    while(p!=NULL&&j<i-1){
//        p=p->next;
//        j++;
//    }LNode *p=GetElem(L,i-1);//    if(p=NULL)
//        return false;
//         
//    LNode *s=(LNode *)malloc(sizeof(LNode));    //申请内存 
//    s->data=e;
//    s->next=p->next;
//    p->next=s;
//    return true;return InsertNextNode(L,e);
} //指定结点前插操作,在p结点前插入e 
bool InsertPriorNode(LNode *p,int e) {if(p==NULL)return false;LNode *s=(LNode *)malloc(sizeof(LNode));    //分配内存 if(s==NULL)return false;        //内存分配失败/*因为单链表是单向的,只有next指针,所以在进行前插操作时,先把e插入到p的后面,然后再交换二者的数据域 */s->next=p->next;p->next=s;s->data=p->data;p->data=e;return true;
}//删除指定结点p。核心:将p后面结点的数据域复制到p中,再将后面的结点删除 
bool DeleteNode(LNode *p){if(p=NULL)return false;LNode *q=p->next;p->data=p->next->data;p->next=q->next;free(q);return true;
} 
int main(){}

双链表

#include<stdio.h>
#include<stdlib.h>
//只有涉及到参数中有结点就需要判断结点是否为空 
//定义
typedef struct DNode{int data;struct DNode *prior,*next;
}DNode,*DLinklist;//初始化
bool InitDLinkList(DLinklist &L){L=(DNode *)malloc(sizeof(DNode));if(L==NULL)return false;L->next=NULL;L->prior=NULL;return true;
}
//插入
bool InsertNextDNode(DNode *p,DNode *e){if(p==NULL||e==NULL)return false;e->next=p->next;if(p->next!=NULL)p->next->prior=e;e->prior=p;p->next=e;return true;}
//删除,删除p的后继结点
bool DeleteNextDNode(DNode *p){if(p==NULL)        return false;DNode *q=p->next;if(q==NULL)return false;p->next=q->next;if(q->next!=NULL)q->next->prior=p;free(q);return true;} //遍历 int main(){} 

循环单链表

#include<stdio.h>
#include<stdlib.h>
//定义
typedef struct LNode{int data;        //数据域 struct LNode *next;        //指针域指向下一个结点,所以是 struct LNode类型 
}LNode,*LinkList;        //*LinkList用于表示这是一个指向 struct LNode类型的指针 //初始化(有头结点),只分配一个头结点 
bool InitList(LinkList &L){            //LNode主要强调这是一个结点,而LinkList主要强调这是一个单链表,这里是对单链表进行初始化,所以参数最好使用LinkList L=(LNode *)malloc(sizeof(LNode));        //分配一个头结点的内存 if(L==NULL)        //内存不足,分配失败 return false;L->next=L;        //头结点后面暂时没有结点 return true; 
}//单链表的建立——尾插法
LinkList List_TailInsert(LinkList &L){//第一步:初始化一个单链表L=(LinkList)malloc(sizeof(LNode));    //建立头结点,注意这里强调是单链表,所以是LinkList类型 LNode *s,*r=L;        //s结点用于存储新元素,r结点为尾结点,永远指向最后一个结点int x;        //新元素scanf("%d",&x);        //输入新元素的值if(x!=999){            //当输入999时结束新元素插入 s=(LNode *)malloc(sizeof(LNode));        //为新节点分配内存if(s=NULL)        //内存分配失败 return NULL;s->data=x;r->next=s;r=s;scanf("%d",&x);        //输入新元素的值} r->next=NULL;        //注意不能忘记 return L;}//单链表的建立——头插法,与尾插法同理,只是不需要尾指针,因为头结点代替了他的作用
LinkList List_HeadInsert(LinkList &L){L=(LinkList)malloc(sizeof(LNode));L->next=L;LNode *s;int x;scanf("%d",&x);if(x!=999){s=(LNode *)malloc(sizeof(LNode));if(s=NULL)return NULL;s->data=x;s->next=L->next;L->next=s;scanf("%d",&x);}return L;
} //指定结点后插操作,在p结点后插入e 
bool InsertNextNode(LNode *p,int e) {if(p==NULL)return false;LNode *s=(LNode *)malloc(sizeof(LNode));    //分配内存 if(s==NULL)return false;        //内存分配失败s->data=e;s->next=p->next;p->next=s;return true;
}//按位查找,查找第i个元素 
LNode * GetElem(LinkList L,int i){if(i<0)return NULL;LNode *p;        //p指针用于指向当前扫描到的结点int j=0;         //j表示当前扫描到了第几个结点,开始是头结点——第0个结点p=L;            //p开始指向头结点 while(p!=NULL&&j<i){p=p->next;j++;} return p;
} //按值查找
LNode * LocateElem(LinkList L,int e){LNode *p=L->next;    //p指向第一个结点while(p!=NULL&&p->data!=e){p=p->next;} return p;} //插入,在位置i插入结点e ,采用封装思想 
bool ListInsert(LinkList &L,int i,int e){if(i<1)return false; //    LNode *p;        //p指针用于指向当前扫描到的结点
//    int j=0;        //j表示当前扫描到了第几个结点
//    p=L;        //p指针最初指向头结点 
//    if(p!=NULL&&j<i-1){        //找到并用p指向第i-1个结点 
//        p=p->next;
//        j++ ; 
//    } LNode *p=GetElem(L,i-1);         //找到第i-1个结点//    if(p==NULL)        //防止i>(链表长度+1) 
//        return false;
//        
//    LNode *s=(LNode *)malloc(sizeof(LNode));    //分配一个结点的内存
//    s->data=e;
//    s->next=p->next;
//    p->next=s;
//    return true; return InsertNextNode(p,e);            //再第i-1个结点后面插入e 
} //指定结点前插操作,在p结点前插入e 
bool InsertPriorNode(LNode *p,int e) {if(p==NULL)return false;LNode *s=(LNode *)malloc(sizeof(LNode));    //分配内存 if(s==NULL)return false;        //内存分配失败/*因为单链表是单向的,只有next指针,所以在进行前插操作时,先把e插入到p的后面,然后再交换二者的数据域 */s->next=p->next;p->next=s;s->data=p->data;p->data=e;return true;
}//按位删除,删除表L中第i个位置的元素,并用e返回删除元素的值 。核心:找到第i-1个元素 
bool ListDelete(LinkList &L,int i,int e){if(i<1)return false;LNode *p;    //指向当前扫描到的结点int j=0;        //当前扫描到第几个结点,头结点是第0个结点 p=L;        //p开始指向头结点(注意:头结点不存储数据)while(p!=NULL&&j<i-1){        //找第i-1个元素 p=p->next;j++;} if(p==NULL)return false;if(p->next==L)        //说明p是最后一个结点 return false;LNode *q=p->next;        //令q指向被删除的结点 e=q->data;                //用e返回删除元素的值p->next=q->next; free(q);return true;
} //删除指定结点p。核心:将p后面结点的数据域复制到p中,再将后面的结点删除 
bool DeleteNode(LNode *p){if(p=NULL)return false;LNode *q=p->next;p->data=p->next->data;p->next=q->next;free(q);return true;
} 
int main(){}

循环双链表

#include<stdio.h>
#include<stdlib.h>
//只有涉及到参数中有结点就需要判断结点是否为空 
//定义
typedef struct DNode{int data;struct DNode *prior,*next;
}DNode,*DLinklist;//初始化
bool InitDLinkList(DLinklist &L){L=(DNode *)malloc(sizeof(DNode));if(L==NULL)        //分配内存失败 return false;L->next=L;L->prior=L;return true;
}
//插入
bool InsertNextDNode(DNode *p,DNode *e){if(p==NULL||e==NULL)return false;e->next=p->next;p->next->prior=e;e->prior=p;p->next=e;return true;}
//删除,删除p的后继结点
bool DeleteNextDNode(DLinklist &L,DNode *p){if(p==NULL)        return false;DNode *q=p->next;if(q==L)return false;p->next=q->next;q->next->prior=p;free(q);return true;} //遍历 int main(){} 

相关文章:

线性表——链式存储

单链表&#xff08;有头结点&#xff09; #include<stdio.h> #include<stdlib.h> //定义 typedef struct LNode{int data; //数据域 struct LNode *next; //指针域指向下一个结点&#xff0c;所以是 struct LNode类型 }LNode,*LinkList; //…...

VUE3和VUE2

VUE3和VUE2 上一篇文章中&#xff0c;我们对VUE3进行了一个初步的认识了解&#xff0c;本篇文章我们来进一步学习一下&#xff0c;顺便看一下VUE2的写法VUE3是否能做到兼容&#x1f600;。 一、新建组件 我们在components中新建一个组件&#xff0c;名称为Peron&#xff0c;…...

mysql5.5版本安装过程

mysql是关系型数据库的管理系统 将安装包放在 c盘根目录 名称为mysql 在该路径下cmd进入命令执行窗口 出现此页面说明安装成功 需要修改配置文件内容 将my-medium.ini 复制粘贴并改名为 my.ini 并添加如下内容 改好之后在mysql目录下cmd进入命令执行窗口 切换到cd bin …...

工厂生产管理系统

为应对一些国内验厂&#xff0c;如大疆等&#xff0c;他们需要客户有自己的生产管理系统的&#xff0c;但实际很多公司是没有引入ERP这类的系统的&#xff0c;从而想开发一套简单的生产管理系统。 参考了网上一个比较古老的StorageMange项目&#xff0c;此项目用到DevExpress的…...

Atlas 200I DK A2安装MindSpore Ascend版本

一、参考资料 mindspore快速安装 二、重要说明 经过博主多次尝试多个版本&#xff0c;Atlas 200I DK A2无法安装MindSpore Ascend版本。 也有其他博主测试&#xff0c;也未尝成功&#xff0c;例如&#xff1a;【MindSpore易点通漫游世界】在Atlas 200I DK A2 (CANN6.2.RC2)…...

Go 生成UUID唯一标识

什么是UUID 通用唯一识别码&#xff08;英语&#xff1a;Universally Unique Identifier&#xff0c;简称UUID&#xff09;是一种软件建构的标准&#xff0c;亦为自由软件基金会组织在分散式计算环境领域的一部份。 UUID的目的&#xff0c;是让分散式系统中的所有元素&#x…...

【知识蒸馏】deeplabv3 logit-based 知识蒸馏实战,对剪枝的模型进行蒸馏训练

本文将对【模型剪枝】基于DepGraph(依赖图)完成复杂模型的一键剪枝 文章中剪枝的模型进行蒸馏训练 一、逻辑蒸馏步骤 加载教师模型定义蒸馏loss计算蒸馏loss正常训练 二、代码 1、加载教师模型 教师模型使用未进行剪枝&#xff0c;并且已经训练好的原始模型。 teacher_mod…...

02.爬虫---HTTP基本原理

02.HTTP基本原理 1.URI 和 URL 的区别2.HTTP 和 HTTPS 的区别3.请求过程 1.URI 和 URL 的区别 URL&#xff08;Uniform Resource Locator&#xff09;即-统一资源定位符 URL是用来定位和访问互联网上资源的独特标识&#xff0c;它包括了资源的位置&#xff08;如IP地址或域名&a…...

HTTP响应的基本概念

目录 HTTP响应中的一些信息 HTTPS HTTP响应中的一些信息 状态码&#xff1a;描述了这次HTTP请求是否成功&#xff0c;以及失败的原因。 1&#xff09;200 ---OK 表示这次访问成功了。 2&#xff09;404 ---Not Found 表示客户端请求的资源在服务器这边不存在。 3&a…...

链栈的存储

单向链表在栈中的存储 typedef struct StackNode {SElemType data;struct StackNode* next; }StackNode, *LinkStack; LinkStack S; //链栈初始化 void InitStack(LinkStack& S) {S NULL;return OK; } //判断链栈是否为空 Status StackEmpty(LinkStack S) {if (S NU…...

常见网络协议及端口号

https://www.cnblogs.com/Snail-yellow/p/17722411.html 常见的网络协议-腾讯云开发者社区-腾讯云 常见的网络协议知识整理_五种常用的网络协议-CSDN博客 端口 协议 常见的网络协议_计算机网络协议有哪些csdn-CSDN博客 ​​​​​​​​​​​​​​协议 常见的网络协议知…...

几张自己绘制的UML图

全部来源于公司项目&#xff0c;使用建模工具 Enterprise Architect。自己做的其余文档&#xff08;含绘图&#xff09;&#xff0c;因保密协议不便于公开。...

[读论文]精读Self-Attentive Sequential Recommendation

论文链接&#xff1a;https://arxiv.org/abs/1808.09781 其他解读文章&#xff1a;https://mp.weixin.qq.com/s/cRQi3FBi9OMdO7imK2Y4Ew 摘要 顺序动态是许多现代推荐系统的一个关键特征&#xff0c;这些系统试图根据用户最近执行的操作来捕获用户活动的“上下文”。为了捕捉…...

HTML静态网页成品作业(HTML+CSS)——动漫海绵宝宝介绍网页(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有5个页面。 二、作品演示 三、代…...

开放式耳机2024超值推荐!教你如何选择蓝牙耳机!

开放式耳机的便利性让它在我们的日常生活中变得越来越重要。它让我们摆脱了传统耳机的限制&#xff0c;享受到了更多的自由。不过&#xff0c;市面上的开放式耳机种类繁多&#xff0c;挑选一款既实用又实惠的产品确实需要一些小窍门。作为一位对开放式耳机颇有研究的用户&#…...

程序员搞副业的障碍有那些?

利用信息差是最常见的商业模式 在这个世界上&#xff0c;没有什么是所有人都知道的&#xff0c;信息差总是存在的。 无论是经验、技巧、知识&#xff0c;甚至是常识&#xff0c;都可能是信息差的源泉&#xff0c;而存在信息差的地方就意味着有赚钱的商机。 面对用户需求的金…...

windows7的ie11降级到ie8

重点是要在程序管理窗口中“查看已安装的更新”打开当前系统中已安装更新列表&#xff0c;找到两个IE11的更新&#xff08;见下图“卸载文件“&#xff09;并卸载掉&#xff0c;这样windows功能中的ie11才会变成ie8. 打开控制面板 进入面板&#xff0c;点击程序&#xff0c;进…...

楼房vr安全逃生模拟体验让你在虚拟环境中亲身体验火灾的紧迫与危险

消防VR安全逃生体验系统是深圳VR公司华锐视点引入了前沿的VR虚拟现实、web3d开发和多媒体交互技术&#xff0c;为用户打造了一个逼真的火灾现场应急逃生模拟演练环境。 相比传统的消防逃生模拟演练&#xff0c;消防VR安全逃生体验系统包含知识讲解和模拟实训演练&#xff0c;体…...

rust 学习--所有权

所有权是rust的核心功能。 Rust 是通过所有权来管理内存回收的 栈&#xff08;Stack&#xff09; 栈是后进先出的 栈中存储的数据在编译时是固定内存大小的数据 数据移除栈叫出栈&#xff0c;数据存入栈叫入栈 入栈要比在堆上分配内存块&#xff0c;入栈时分配器无需为存储…...

关于Git 的基本概念和使用方式

Git是一个分布式版本控制系统&#xff0c;用于跟踪和管理代码的改动。它具有以下基本概念和使用方式&#xff1a; 1. 仓库&#xff08;Repository&#xff09;&#xff1a;Git使用仓库来存储代码和相关的历史记录。仓库可以是本地的&#xff0c;也可以是远程的。本地仓库保存在…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...

Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解

文章目录 一、开启慢查询日志&#xff0c;定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...