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

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


目录

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:小江目前只是个新手小白。欢迎大家在评论区讨论哦!有问题也可以讨论的!

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

相关文章:

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

目录 1.顺序表的前言 1.1 顺序表--->通讯录&#x1f4c7; 1.2 数据结构的相关概念&#x1f3c7; 1.2.1 什么是数据结构 1.2.1 为什么需要数据结构 2. 顺序表概念及分类 2.1 顺序表的概念&#x1f419; 2.2 顺序表的分类&#x1f42b; 2.2.1 顺序表和数组的区别 2.…...

Java高级-CompletableFuture并发编程利器

CompletableFuture核心Api 1.概述2.Async2.a) supplyAsync2.b) runAsync 3.Then3.a) thenApply()3.b) thenApplyAsync() 1.概述 Future可以在并发编程中异步获取结果 CompletableFuture实现了Future接口&#xff0c;肯定也会有Future的功能&#xff0c;也相当于是Future的一个…...

python、java、c++哪一个前景比较好?

Python是一种广泛使用的高级编程语言&#xff0c;适用于数据分析、人工智能、机器学习等领域。Java是一种通用的编程语言&#xff0c;适用于企业级应用开发、网站开发、软件开发、嵌入式领域等。C是一种系统编程语言&#xff0c;适用于嵌入式开发、游戏开发、音视频、服务端开发…...

【排序算法】详解直接插入排序和希尔排序原理及其性能分析

文章目录 插入排序算法原理细节分析代码实现复杂度分析:稳定性分析:与冒泡排序的对比 希尔排序算法原理细节分析代码实现复杂度分析稳定性分析 总结对比 插入排序 算法原理 插入排序又或者说直接插入排序,是一种和冒泡排序类似的并且比较简单的排序方法&#xff0c; 基本思想…...

JDK1.8对HashMap的优化、以及通过源码解析1,8扩容机制

JDK 1.8 对 HashMap 进行了一些优化&#xff0c;主要包括以下几个方面的改进&#xff1a; 红黑树&#xff1a;在 JDK 1.8 中&#xff0c;当哈希碰撞&#xff08;多个键映射到同一个桶&#xff09;达到一定程度时&#xff0c;HashMap 会将链表转化为红黑树&#xff0c;以提高查找…...

Linux串口断帧处理

报文格式 1 Byte 4 Byte N Byte 4 Byte 1 Byte 0x02 报文长度 报文 CRC16 0x03 1. 每条报文以 STX&#xff08;0x02&#xff09;起始符开始&#xff0c;以 ETX&#xff08;0x03&#xff09;终止符结束。 2. 报文正文长度采用 4 字节的 10 进制字符串标识&#xff0c;如报文正…...

springboot集成kafka

1、引入依赖 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.8.6</version></dependency> 2、配置 server:port: 9099 spring:kafka:bootstrap-servers: 192.1…...

近期总结2023.10.16

规律 1.两数相减&#xff0c;相加的最大&#xff0c;最小值 2.由最初的状态递推 3.无强制顺序&#xff0c;排序,不能排序&#xff0c;则与顺序有关 4.对于一段等差数列&#xff0c;不用一段一段的算局部整体&#xff0c;可以从整体一步步加差值 5.需要从一段式子推到结果困难&…...

【EI会议征稿】第二届可再生能源与电气科技国际学术会议(ICREET 2023)

第二届可再生能源与电气科技国际学术会议(ICREET 2023) 2023 2nd International Conference on Renewable Energy and Electrical Technology 2020年中国可再生能源发电规模显著扩大&#xff0c;风力和太阳能发电均呈迅速增长趋势。中国大力推进能源低碳化&#xff0c;减少温…...

让ChatGPT等模型学会自主思考!开创性技术“自主认知”框架

ChatGPT、百度文心一言、Bard等大语言模型展现出了超强的创造能力&#xff0c;加速了生成式AI的应用进程。但AI模型只能基于训练数据执行各种任务&#xff0c;无法像人类一样利用生活知识、过往经验用于复杂的推理和决策。 例如&#xff0c;在玩游戏时&#xff0c;人类可以利用…...

Jmeter脚本参数化和正则匹配

我们在做接口测试过程中&#xff0c;往往会遇到以下几种情况 每次发送请求&#xff0c;都需要更改参数值为未使用的参数值&#xff0c;比如手机号注册、动态时间等 上一个接口的请求体参数用于下一个接口的请求体参数 上一个接口的响应体参数用于下一个接口的请求体参数&#…...

vue 请求代理 proxy

目录 为什么需要配置代理 什么是同源策略 如何配置代理 请求代理的原理 举例说明 为什么需要配置代理 因为浏览器的同源策略&#xff0c;当向和本地 devServer 服务器不同源的地址发送请求&#xff0c; 会违反浏览器的同源策略&#xff0c;导致发送失败&#xff0c;所以需…...

使用Spring Boot构建稳定可靠的分布式爬虫系统

摘要&#xff1a;本文将介绍如何使用Spring Boot框架构建稳定可靠的分布式爬虫系统。我们将从系统设计、任务调度、数据存储以及容灾与故障恢复等方面进行详细讲解&#xff0c;帮助读者理解并实践构建高效的分布式爬虫系统。 1. 引言 随着互联网的快速发展&#xff0c;爬虫系…...

分享一个查询OpenAI Chatgpt key余额查询的工具网站

OpenAI Key 余额查询工具 欢迎使用 OpenAI Key 余额查询工具网站&#xff01;这个工具可以帮助您轻松地验证您的 OpenAI API 密钥&#xff0c;并查看您的余额。 http://tools.lbbit.top/check_key/ 什么是 OpenAI Key 余额查询工具&#xff1f; OpenAI Key 余额查询工具是一…...

【LeetCode刷题(数据结构与算法)】:二叉树的后序遍历

给你一棵二叉树的根节点root 返回其节点值的后序遍历 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[3,2,1] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a; 输入&#xff1a;root [1] 输出&#xff1a;[1]…...

内网、外网、宽带、带宽、流量、网速之间的区别与联系

一.带宽与宽带的区别是什么&#xff1f; 带宽是量词&#xff0c;指的是网速的大小&#xff0c;比如1Mbps的意思是一兆比特每秒&#xff0c;这个数值就是指带宽。 宽带是名词&#xff0c;说明网络的传输速率速很高 。宽带的标准各不相同&#xff0c;最初认为128kbps以上带宽的就…...

打造类ChatGPT服务,本地部署大语言模型(LLM),如何远程访问?

ChatGPT的成功&#xff0c;让越来越多的人开始关注大语言模型&#xff08;LLM&#xff09;。如果拥有了属于自己的大语言模型&#xff0c;就可以对其进行一些专属优化。例如&#xff1a;打造属于自己的AI助理&#xff0c;或是满足企业自身的业务及信息安全需求。 所以&#xff…...

linux平台的无盘启动开发

by fanxiushu 2023-10-15 转载或引用请注明原始作者。 前一章节介绍的是linux平台下的虚拟磁盘驱动开发过程&#xff0c;主要讲述了 基于block的磁盘和基于SCSI接口的磁盘。 本文介绍的内容正是基于上文中的SCSI接口的虚拟磁盘实现的无盘启动。 同样的&#xff0c;linux系统下也…...

【GO入门】环境配置及Vscode配置

1 GO环境配置 欢迎来到Go的世界&#xff0c;让我们开始探索吧&#xff01; Go是一种新的语言&#xff0c;一种并发的、带垃圾回收的、快速编译的语言。它具有以下特点&#xff1a; 它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序。Go为软件构造提供了一种模型&…...

家政服务小程序,家政维修系统,专业家政软件开发商;家政服务小程序,家政行业软件开发

家政服务小程序&#xff0c;家政维修系统&#xff0c;专业家政软件开发商&#xff1b; 家政服务小程序&#xff0c;家政行业软件开发解决方案&#xff0c;家政软件经验丰富实践&#xff0c;系统高度集成&#xff0c;提供师傅端、用户端、… 家政服务app开发架构有 1、后台管理端…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

从数据报表到决策大脑:AI重构电商决策链条

在传统电商运营中&#xff0c;决策链条往往止步于“数据报表层”&#xff1a;BI工具整合历史数据&#xff0c;生成滞后一周甚至更久的销售分析&#xff0c;运营团队凭经验预判需求。当爆款突然断货、促销库存积压时&#xff0c;企业才惊觉标准化BI的决策时差正成为增长瓶颈。 一…...

【Ragflow】26.RagflowPlus(v0.4.0):完善解析逻辑/文档撰写模式全新升级

概述 在历经半个月的间歇性开发后&#xff0c;RagflowPlus再次迎来一轮升级&#xff0c;正式发布v0.4.0。 开源地址&#xff1a;https://github.com/zstar1003/ragflow-plus 更新方法 下载仓库最新代码&#xff1a; git clone https://github.com/zstar1003/ragflow-plus.…...