学习笔记---超基础+详细+新手的顺序表~~


目录

1.顺序表的前言

1.1 顺序表--->通讯录📇

1.2 数据结构的相关概念🏇

1.2.1 什么是数据结构

1.2.1 为什么需要数据结构

2. 顺序表概念及分类

2.1 顺序表的概念🐙

2.2 顺序表的分类🐫

2.2.1 顺序表和数组的区别

2.2.2 顺序表分类

1.静态顺序表

2. 动态顺序表 

3. 实现动态顺序表

3.1 要实现的目标🫵

3.2 创建(初始化)顺序表🌺

3.2.1 Seqlist.h

3.2.2 Seqlist.c

3.2.3 test.c

3.2.4 代码测试

3.3 销毁💥

3.3.1 Seqlist.h

3.3.2 Seqlist.c

3.3.3 test.c

3.3.4 代码测试

3.4 尾部插入数据🌈+打印顺序表

3.4.0 思路分析

3.4.1 Seqlist.h

3.4.2 Seqlist.c

3.4.3 test.c

3.4.4 代码测试

3.5 头部插入数据💫

3.5.0 思路分析

3.5.1 Seqlist.h

3.5.2 Seqlist.c

3.5.3 test.c

3.5.4 代码运行测试

3.6 尾部删除数据⛄️

3.6.0 思路分析

3.6.1 Seqlist.h

3.6.2 Seqlist.c

3.6.3 test.c

3.6.4 代码运行测试

​编辑

3.7 头部删除数据🌊

3.7.0 思路分析

3.7.1 Seqlist.h

3.7.2 Seqlist.c

3.7.3 test.c

3.7.4 代码运行测试

3.8 指定位置之前插入数据🍿

3.8.0 思路分析

3.8.1 Seqlist.h

3.8.2 Seqlist.c

3.8.3 test.c

3.8.4 代码运行测试

3.9 指定位置删除数据⚾️

3.9.0 思路分析

3.9.1 Seqlist.h

3.9.2 Seqlist.c

3.9.3 test.c

3.9.4 代码运行测试

4.0 查找数据🍺

4.0.1 Seqlist.h

4.0.2 Seqlist.c

4.0.3 test.c

4.0.4 代码运行测试
​​​​​​​​​​​​​​


1.顺序表的前言

1.1 顺序表--->通讯录📇

我们前面学习了C语言,它能够帮助我们实现通讯录📇项目,要想实现通讯录项⽬有两个技术关键:

1)C语⾔语法基础

2)数据结构之顺序表/链表(链表我们下下期讲)

1.2 数据结构的相关概念🏇

1.2.1 什么是数据结构

数据结构是计算机存储、组织数据的⽅式

数据肉眼可见的信息,例如:数值1,2......  网页信息......

结构:借助数组这样的数据结构将⼤量的同一类型的数据组织在⼀起

总结:

1)能够存储数据(如顺序表、链表等结构)

2)存储的数据能够⽅便查找


1.2.1 为什么需要数据结构

我们要知道最简单的数据结构是数组

通过数据结构,能够有效将数据组织和管理在⼀起。按照我们的⽅式任意对数据进⾏增删改查等操作。


但是,数组不满足于复杂场景数据的管理:

1.数组仅存储同类型的数据  eg.int  arr[10]     char  arr[10]

2.数组可提供的接口不足以支撑复杂场景的数据处理--->这就是为什么我们要学习其他的数据结构:通过数据结构,我们可以先写出底层逻辑,然后直接调用。例如C语言的sizeof

2. 顺序表概念及分类

2.1 顺序表的概念🐙

顺序表是线性表的一种。(他们的关系可以类比于西瓜🍉和水果的关系(包含关系))

线性表指的是具有相同特性的一类数据结构的总称。常⻅的线性表:顺序表、链表、栈、队列、字符串... 

相同特性:逻辑结构一定是线性的,在物理结构不一定是线性的

逻辑结构人为想象出来的,排列起来成线性,例如排队在逻辑结构上就是线性的(像一条线一样排列)

物理结构内存存储上按照线性排列,例如数组的每个元素地址在物理结构上就是线性的(相邻元素地址是连续的)

顺序表的底层结构是数组--->顺序表逻辑结构一定是线性的,在物理结构上也一定是线性的

2.2 顺序表的分类🐫

2.2.1 顺序表和数组的区别

◦ 顺序表的底层结构是数组,对数组的封装,实现了常⽤的增删改查等接⼝

2.2.2 顺序表分类

1.静态顺序表

概念:使⽤定⻓数组存储元素

//静态顺序表
struct Seqlist
{
int a[100];//定长数组
int size;//有效数据个数
}

静态顺序表缺陷:空间给少了不够⽤,给多了造成空间浪费


2. 动态顺序表 

概念:使⽤动态数组存储元素

//动态顺序表
struct Seqlist
{
int* a;//动态数组
int size;//有效数据个数
int capacity;//空间大小
}

动态顺序表优点:按需申请空间,不造成浪费或者不够用,还可以扩容


3. 实现动态顺序表

这里,我们需要创建头文件和源文件

头文件:结构的实现和声明,函数的声明

源文件:函数的具体实现和代码运行的测试

从而,更加方便第三方使用

3.1 要实现的目标🫵

我们需要多个接口帮助我们实现:创建(初始化)、一系列具体操作、销毁

具体操作(一切以实现通讯录为目标)包括:头部/尾部插入数据、头部/尾部删除数据、打印出顺序、指定位置插入/删除/查找数据、


3.2 创建(初始化)顺序表🌺

3.2.1 Seqlist.h

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>
//创建动态顺序表
typedef int SLDataType;//方便以后修改数据类型,因为我们不一定每次都需要int类型
typedef struct Seqlist
{SLDataType* a;//动态数组int size;//有效数据个数int capacity;//空间大小
}SL;//重命名顺序表名称,更加简短方便输入//对顺序表初始化
void SLInit(SL* sl);//初始化的函数声明,注意传址调用--->否则形参只是实参的临时拷贝

3.2.2 Seqlist.c

#include"Seqlist.h"
void SLInit(SL* sl)
{sl->a = NULL;sl->size = sl->capacity = 0;
}

3.2.3 test.c

#include"Seqlist.h"
void SLtest()//测试创建的顺序表和初始化的接口
{SL sl;SLInit(&sl);
}
int main()
{SLtest();return 0;
}

3.2.4 代码测试


3.3 销毁💥

3.3.1 Seqlist.h

//对顺序表销毁
void SLDestroy(SL* sl);//函数声明

3.3.2 Seqlist.c

注意⚠️

assert(断言)也可以判断sl->a是否是NULL,但是assert比较暴力,会导致程序直接终止,而下面的方法不会影响后面的程序

//对顺序表销毁
void SLDestroy(SL* sl)
{if (sl->a)free(sl->a);sl->a = NULL;sl->size = sl->capacity = 0;
}

3.3.3 test.c

#include"Seqlist.h"
void SLtest()//测试创建的顺序表和初始化的接口
{//初始化测试SL sl;SLInit(&sl);//销毁测试SLDestroy(&sl);
}int main()
{SLtest();return 0;
}

3.3.4 代码测试


3.4 尾部插入数据🌈+打印顺序表

3.4.0 思路分析

由于尾插/头插都需要判断空间够不够,所以我们直接把判断空间十分足够的函数单提出来


对怎样扩容的进一步解释:


3.4.1 Seqlist.h

//打印顺序表
void SLPrint(SL* sl);//尾部插入数据
void SLPushBack(SL* sl, SLDataType x);

3.4.2 Seqlist.c

//判断空间是否足够
void SLCheckCapacity(SL* sl)
{if (sl->size == sl->capacity) {//空间不足,扩容2倍//判断sl->capacity是否为0int newcapacity = sl->capacity == 0 ? 4 : 2 * sl->capacity;//判断原空间是否是0,不是直接*2扩容,是0直接赋值4SLDataType* tmp = (SLDataType*)realloc(sl->a, newcapacity * 2 * sizeof(SLDataType));//采用中间值tmp接收扩容的新空间--->申请空间也不一定成功,如果我们直接让ps->a接收,//但是扩容失败了,那么ps->a的空间直接变成0了//所以我们需要判断一下扩容是否成功if (tmp == NULL){perror("realloc fail!\n");return 1;}sl->a = tmp;//sl->capacity *=2;错误--->因为前面我们初始化sl->capacity=0,0*2=0--->报错--->判断一下sl->capacity是否为0sl->capacity = newcapacity;//记录现有空间大小}
}
//尾部插入数据
void SLPushBack(SL* sl, SLDataType x)
{assert(sl);//不能传过来空指针SLCheckCapacity(sl);//判断空间是否足够//插入数据sl->a[sl->size++] = x;
}//打印顺序表
void SLPrint(SL* sl)
{for (int i = 0; i < sl->size; i++){printf("%d ", sl->a[i]);}printf("\n");
}

3.4.3 test.c

#include"Seqlist.h"
void SLtest()//测试创建的顺序表和初始化的接口
{//初始化测试SL sl;SLInit(&sl);//尾插测试SLPushBack(&sl, 1);SLPushBack(&sl, 2);SLPushBack(&sl, 3);SLPushBack(&sl, 4);//打印SLPrint(&sl);//销毁测试SLDestroy(&sl);
}int main()
{SLtest();return 0;
}

3.4.4 代码测试


3.5 头部插入数据💫

3.5.0 思路分析

思路和尾插类似,只不过插入数据的位置变了


3.5.1 Seqlist.h

//头部插入数据
void SLPushFront(SL* sl, SLDataType x);

3.5.2 Seqlist.c

//头部插入数据
void SLPushFront(SL* sl, SLDataType x)
{assert(sl);SLCheckCapacity(sl);//判断空间是否足够//插入数据for (int i = sl->size - 1; i >=0 ; i--){//最后一次进来的是i=0sl->a[i + 1] = sl->a[i];}sl->a[0] = x;sl->size++;
}

3.5.3 test.c

#include"Seqlist.h"
void SLtest()//测试创建的顺序表和初始化的接口
{//初始化测试SL sl;SLInit(&sl);//尾插测试SLPushBack(&sl, 1);SLPushBack(&sl, 2);SLPushBack(&sl, 3);SLPushBack(&sl, 4);//打印SLPrint(&sl);//1 2 3 4//头插测试SLPushFront(& sl, 5);//打印SLPrint(&sl);//5 1 2 3 4//销毁测试SLDestroy(&sl);
}int main()
{SLtest();return 0;
}

3.5.4 代码运行测试


3.6 尾部删除数据⛄️

3.6.0 思路分析


3.6.1 Seqlist.h

//尾部删除数据
void SLPopBack(SL* sl);

3.6.2 Seqlist.c

bool SLIsEmpty(SL* sl)
{//判断顺序表是否为空assert(sl);return sl->size == 0;
}
//尾部删除数据
void SLPopBack(SL* sl)
{assert(sl);assert(!SLIsEmpty(sl));//顺序表不能为空sl->size--;
}

3.6.3 test.c

#include"Seqlist.h"
void SLtest()//测试创建的顺序表和初始化的接口
{//初始化测试SL sl;SLInit(&sl);//尾插测试SLPushBack(&sl, 1);SLPushBack(&sl, 2);SLPushBack(&sl, 3);SLPushBack(&sl, 4);//打印SLPrint(&sl);//1 2 3 4//头插测试SLPushFront(& sl, 5);//打印SLPrint(&sl);//5 1 2 3 4//尾删测试//尾部删除数据SLPopBack(&sl);//打印SLPrint(&sl);//5 1 2 3 //销毁测试SLDestroy(&sl);
}int main()
{SLtest();return 0;
}

3.6.4 代码运行测试


3.7 头部删除数据🌊

3.7.0 思路分析

我们需要将后面的数据往前移动一位


3.7.1 Seqlist.h

//头部删除数据
void SLPopFront(SL* sl);

3.7.2 Seqlist.c

//头部删除数据
void SLPopFront(SL* sl)
{assert(sl);assert(!SLIsEmpty(sl));//顺序表不能为空for (int i = 0; i < sl->size-1; i++){//最后一次进来的是size-2sl->a[i] = sl->a[i + 1];}sl->size--;
}

3.7.3 test.c

#include"Seqlist.h"
void SLtest()//测试创建的顺序表和初始化的接口
{//初始化测试SL sl;SLInit(&sl);//尾插测试SLPushBack(&sl, 1);SLPushBack(&sl, 2);SLPushBack(&sl, 3);SLPushBack(&sl, 4);//打印SLPrint(&sl);//1 2 3 4//头插测试SLPushFront(& sl, 5);//打印SLPrint(&sl);//5 1 2 3 4//尾删测试//尾部删除数据SLPopBack(&sl);//打印SLPrint(&sl);//5 1 2 3 //头部删除数据SLPopFront(&sl);//打印SLPrint(&sl);// 1 2 3//销毁测试SLDestroy(&sl);
}int main()
{SLtest();return 0;
}

3.7.4 代码运行测试


3.8 指定位置之前插入数据🍿

3.8.0 思路分析


3.8.1 Seqlist.h

//指定位置之前插入数据
void SLInsert(SL* sl, int pos, SLDataType x);

3.8.2 Seqlist.c

//指定位置之前插入数据
void SLInsert(SL* sl, int pos, SLDataType x)
{assert(sl);assert(pos >= 0 && pos <= sl->size);//pos确保合法SLCheckCapacity(sl);//判断空间是否足够--->是否需要扩容for (int i = sl->size - 1; i > pos - 1; i--){//最后进来的是possl->a[i+1] = sl->a[i];}sl->a[pos]=x;sl->size++;
}

3.8.3 test.c

#include"Seqlist.h"
void SLtest()//测试创建的顺序表和初始化的接口
{//初始化测试SL sl;SLInit(&sl);//尾插测试SLPushBack(&sl, 1);SLPushBack(&sl, 2);SLPushBack(&sl, 3);SLPushBack(&sl, 4);//打印SLPrint(&sl);//1 2 3 4//头插测试SLPushFront(& sl, 5);//打印SLPrint(&sl);//5 1 2 3 4//尾删测试//尾部删除数据SLPopBack(&sl);//打印SLPrint(&sl);//5 1 2 3 //头部删除数据SLPopFront(&sl);//打印SLPrint(&sl);// 1 2 3//指定位置之前插入数据SLInsert(&sl, 1, 4);//打印SLPrint(&sl);// 4 1 2 3//销毁测试SLDestroy(&sl);
}int main()
{SLtest();return 0;
}

3.8.4 代码运行测试


3.9 指定位置删除数据⚾️

3.9.0 思路分析


3.9.1 Seqlist.h

//指定位置删除数据
void SLErase(SL* sl, int pos);

3.9.2 Seqlist.c

//指定位置删除数据
void SLErase(SL* sl, int pos)
{assert(sl);assert(!SLIsEmpty(sl));//顺序表若为空--->不能删除assert(pos >= 0 && pos <= sl->size);//pos确保合法for (int i = pos; i <sl->size-1 ; i++){//最后进来的是size-2sl->a[i] = sl->a[i + 1];}sl->size--;
}

3.9.3 test.c

#include"Seqlist.h"
void SLtest()//测试创建的顺序表和初始化的接口
{//初始化测试SL sl;SLInit(&sl);//尾插测试SLPushBack(&sl, 1);SLPushBack(&sl, 2);SLPushBack(&sl, 3);SLPushBack(&sl, 4);//打印SLPrint(&sl);//1 2 3 4//头插测试SLPushFront(& sl, 5);//打印SLPrint(&sl);//5 1 2 3 4//尾删测试//尾部删除数据SLPopBack(&sl);//打印SLPrint(&sl);//5 1 2 3 //头部删除数据SLPopFront(&sl);//打印SLPrint(&sl);// 1 2 3//指定位置之前插入数据SLInsert(&sl,0,4);//打印SLPrint(&sl);// 4 1 2 3//指定位置删除数据SLErase(&sl, 2);//打印SLPrint(&sl);// 4 1 3//销毁测试SLDestroy(&sl);
}int main()
{SLtest();return 0;
}

3.9.4 代码运行测试


4.0 查找数据🍺

4.0.1 Seqlist.h

//查找数据
bool SLFind(SL* sl, SLDataType x);

4.0.2 Seqlist.c

//查找数据
bool SLFind(SL* sl, SLDataType x)
{assert(sl);for (int i = 0; i < sl->size; i++){if (sl->a[i] == x)return true;}return false;
}

4.0.3 test.c

#include"Seqlist.h"
void SLtest()//测试创建的顺序表和初始化的接口
{//初始化测试SL sl;SLInit(&sl);//尾插测试SLPushBack(&sl, 1);SLPushBack(&sl, 2);SLPushBack(&sl, 3);SLPushBack(&sl, 4);//打印SLPrint(&sl);//1 2 3 4//头插测试SLPushFront(& sl, 5);//打印SLPrint(&sl);//5 1 2 3 4//尾删测试//尾部删除数据SLPopBack(&sl);//打印SLPrint(&sl);//5 1 2 3 //头部删除数据SLPopFront(&sl);//打印SLPrint(&sl);// 1 2 3//指定位置之前插入数据SLInsert(&sl,0,4);//打印SLPrint(&sl);// 4 1 2 3//指定位置删除数据SLErase(&sl, 2);//打印SLPrint(&sl);// 4 1 3//查找数据测试bool ret=SLFind(&sl, 3);if (ret){printf("找到了!\n");}else{printf("没找到!\n");}//销毁测试SLDestroy(&sl);
}int main()
{SLtest();return 0;
}

4.0.4 代码运行测试


本次的分享到这里就结束了!!!

PS:小江目前只是个新手小白。欢迎大家在评论区讨论哦!有问题也可以讨论的!

如果对你有帮助的话,记得点赞👍+收藏⭐️+关注➕

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/107575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金x软件有限公司安全测试岗位面试

目录 一、自我介绍 二、你是网络空间安全专业的&#xff0c;那你介绍下网络空间安全这块主要学习的东西&#xff1f; 三、本科专业是网络工程&#xff0c;在嘉兴海视嘉安智城科技有限公司实习过&#xff0c;你能说下干的工作吗&#xff1f;&#xff08;没想到问的是本科实习…

第一个Spring程序

目录 一、怎么创建Spring项目 1.1 使用maven创建Spring项目 1.2 导入Spring相关依赖 二、Spring的配置文件 三、使用Spring配置文件创建类对象 3.1 Spring核心api 3.2 Spring程序开发 一、怎么创建Spring项目 1.1 使用maven创建Spring项目 在创建新项目的时候使用maven去创建…

NLP算法面经 | 腾讯 VS 美团

作者 | 曾同学 编辑 | NewBeeNLP 面试锦囊之面经分享系列&#xff0c;持续更新中 后台回复『面试』加入讨论组交流噢 lz从3月初脚因打球扭伤了开始&#xff0c;投递简历&#xff0c;接二连三的面试鞭尸又面试&#xff0c;昨天才终于上岸了&#xff0c;分享经验~ 腾讯PCG看点&…

【Python-Django】基于TF-IDF算法的医疗推荐系统复现过程

复现步骤 step1&#xff1a; 修改原templates路径&#xff0c;删除&#xff0c;将setting.py中的路径置空 step2&#xff1a; 注册app python manage.py startapp [app名称]在app目录下创建static和templates目录 step3&#xff1a; 将项目中的资源文化进行拷贝 step4&#…

新能源电池试验中准确模拟高空环境大气压力的解决方案

摘要&#xff1a;针对目前新能源电池热失控和特性研究以及生产中缺乏变环境压力准确模拟装置、错误控制方法造成环境压力控制极不稳定以及氢燃料电池中氢气所带来的易燃易爆问题&#xff0c;本文提出了相应的解决方案。方案的关键一是采用了低漏率电控针阀作为下游控制调节阀实…

《省级国土空间规划编制技术规程》国家标准(GB/T 43214-2023)原文下载

《省级国土空间规划编制技术规程》国家标准&#xff08;GB/T 43214-2023&#xff0c;以下简称《规程》&#xff09;&#xff0c;将于2024年1月1日起实施&#xff0c;该《规程》由市场监管总局&#xff08;国家标准委&#xff09;9月7日批准发布。 《规程》由自然资源部组织编制…

Steam将强制执行短信验证以遏制肆虐的恶意更新

为应对最近爆发的恶意更新&#xff0c;著名游戏平台Steam出品方Valve近日发布公告称&#xff0c;将为Steam 上发布游戏的开发者实施额外的安全措施&#xff0c;包括基于短信的确认码。 游戏及软件开发商在 Steam 平台上分发其产品需要用到Steamworks&#xff0c;它支持DRM&…

GEO生信数据挖掘(九)WGCNA分析

第六节&#xff0c;我们使用结核病基因数据&#xff0c;做了一个数据预处理的实操案例。例子中结核类型&#xff0c;包括结核&#xff0c;潜隐进展&#xff0c;对照和潜隐&#xff0c;四个类别。第七节延续上个数据&#xff0c;进行了差异分析。 第八节对差异基因进行富集分析。…

数据分析案例-基于snownlp模型的MatePad11产品用户评论情感分析(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

Android 内容提供者和内容观察者:数据共享和实时更新的完美组合

任务要求 一个作为ContentProvider提供联系人数据另一个作为Observer监听联系人数据的变化&#xff1a; 1、创建ContactProvider项目&#xff1b; 2、在ContactProvider项目中用Sqlite数据库实现联系人的读写功能&#xff1b; 3、在ContactProvider项目中通过ContentProvid…

深度学习-卷积神经网络

文章目录 应用卷积神经网络卷积处理分类问题 应用 图片分类图片检索图片分割图片风格迁移姿态估计OCR等 卷积神经网络 核概念计算机视觉中处理图片的核大小是通过经验得来的&#xff0c;而深度学习中的权重大小是自己学习出的。卷积VS神经网络&#xff1a;一个是局部观察一个…

Go-Python-Java-C-LeetCode高分解法-第十周合集

前言 本题解Go语言部分基于 LeetCode-Go 其他部分基于本人实践学习 个人题解GitHub连接&#xff1a;LeetCode-Go-Python-Java-C 欢迎订阅CSDN专栏&#xff0c;每日一题&#xff0c;和博主一起进步 LeetCode专栏 我搜集到了50道精选题&#xff0c;适合速成概览大部分常用算法 突…

【基于windows desktop上的docker配置nacos,并采用宿主机访问】

1、拉取镜像&#xff08;以下命令全部基于powershell&#xff09; docker pull nacos/nacos-server2、启动容器 docker run -d -e PREFER_HOST_MODEhostname -e MODEstandalone -e JVM_XMS256m -e JVM_XMX256m -e JVM_XMN128m -p 8848:8848 --name nacos --restartalways nac…

【2】c++11新特性(稳定性和兼容性)—>超长整型 long long

c11标准要求long long整型可以在不同的平台上有不同的长度&#xff0c;但是至少64位&#xff0c;long long整型有两种&#xff1a; 有符号long long&#xff1a;–对应类型的数值可以使用LL或者ll后缀 long long num1 123456789LL; long long num2 123456789ll;无符号unsign…

LeetCode 376. 摆动序列

最长递增子序列 题目链接: 376. 摆动序列 题目描述: 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为 **摆动序列 。**第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如…

ArcGIS笔记8_测量得到的距离单位不是米?一经度一纬度换算为多少米?

本文目录 前言Step 1 遇到测量结果以度为单位的情况Step 2 简单的笨办法转换为以米为单位Step 3 拓展&#xff1a;一经度一纬度换算为多少米 前言 有时我们会遇到这种情况&#xff0c;想在ArcGIS中使用测量工具测量一下某一段距离&#xff0c;但显示的测量结果却是某某度&…

雷电模拟器上使用第一个frida(四)第一个HOOK

经过上述三篇&#xff0c;已经可以使用python3.8.10编写代码&#xff0c;利用frida14.2.18和雷电模拟器9.0.60(9)&#xff0c;Android 9交互。 雷电模拟器上使用第一个frida&#xff08;一&#xff09;之安装-CSDN博客 雷电模拟器上使用第一个frida&#xff08;二&#xff09…

大数据Doris(十一):添加FS_BROKER步骤

文章目录 添加FS_BROKER步骤 一、 ​​​​​​​配置broker节点

机器学习(22)---信息熵、纯度、条件熵、信息增益

文章目录 1、信息熵2、信息增益3、例题分析 1、信息熵 1. 信息熵(information entropy)是度量样本集合纯度最常用的一种指标。信息的混乱程度越大&#xff0c;不确定性越大&#xff0c;信息熵越大&#xff1b;对于纯度&#xff0c;就是信息熵越大&#xff0c;纯度越低。 2. 纯度…

MySQL锁学习笔记

锁 事务的隔离性由锁来实现。 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在程序开发中会存在多线程同步的问题&#xff0c;当多个线程并发访问某个数据的时候&#xff0c;尤其是针对一些敏感的数据&#xff08;比如订单、金额等&#xff09;&#xff0c;我…