数据结构 实验 3

题目一:最短路径dijkstra算法

一、实验目的

  1. 熟练图的邻接矩阵和邻接表表示法
  2. 掌握图的最短路径Dijkstra算法的基本思想
  3. 用C语言实现Dijkstra算法

二、实验内容

从键盘输入的数据创建图(图的存储结构采用邻接矩阵),设计Dijkstra算法求出源点到所有点的最短路径。

三、实验步骤

  1. 先定义邻接矩阵类型
  2. 根据键盘输入的数据创建图,输出邻接矩阵
  3. 设计Dijkstra算法并在VC下用C语言实现算法

四、实验要求

程序代码:

#include <iostream>
#define INF 2147483647L
using namespace std;int main()
{int n, side, sign, i, j, v, w, min, v0;int q, p, num;cout << "请输入图中的顶点个数:";cin >> n;cout << "请输入图中边的条数:";cin >> side;cout << "请选择是有向图还是无向图(有向图为1,无向图为0):";cin >> sign;int arcs[n][n], S[n], D[n], path[n];for (i = 0; i < n; i++)for (j = 0; j < n; j++)arcs[i][j] = INF;for (i = 1; i <= side; i++){cout << "请输入第" << i << "条边的顶点和权值:";cin >> q >> p >> num;arcs[q - 1][p - 1] = num;if (sign == 0) arcs[p - 1][q - 1] = num;}cout << "你输入的有向带权图的邻接矩阵表示:" << endl;for (i = 0; i < n; i++)for (j = 0; j < n; j++){if (arcs[i][j] == INF) cout << "∞";else cout << arcs[i][j];if (j == n - 1) cout << endl;else cout << "  ";}cout << "请输入源点:";cin >> v0;for (v = 0; v < n; ++v){S[v] = 0;D[v] = arcs[v0 - 1][v];if (D[v] < INF) path[v] = v0 - 1;else path[v] = -1;}S[v0 - 1] = 1; D[v0 - 1] = 0;for (i = 1; i < n; ++i){min = INF;for (w = 0; w < n; ++w)if (!S[w] && D[w] < min){v = w; min = D[w];}S[v] = 1;for (w = 0; w < n; ++w)if (!S[w] && arcs[v][w] != INF && (D[v] + arcs[v][w] < D[w])){D[w] = D[v] + arcs[v][w];path[w] = v;}}i = 0;if (i == v0 - 1) i++;while (i < n){cout << "顶点" << v0 << "到顶点" << i + 1 << "的最短路径长度:" << D[i] << ",最短路径为:";int pa[n];for (j = 0; j < n; j++)pa[j] = -1;num = 0;q = i;while (path[q] != v0 - 1){pa[num] = path[q];q = path[q];num++;}cout << v0 << "-->";for (j = n - 1; j >= 0; j--){if (pa[j] != -1){cout << pa[j] + 1;cout << "-->";}}cout << i + 1;i++;if (i == v0 - 1) i++;cout << endl;}return 0;
}
  1. 用无向图A和做实验

 

最短路径和最短距离为(可选择不同的源点,本例以源点分别为1和2 示例): 

 

 

2. 再用有向网 B 做实验

 

 

题目二:用dijkstra算法实现

故宫导游路线设计

问题描述:游客游览某一景点时,对景点不熟悉。特别是对于故宫这样的大型景点,如果随便参观的话,可能会错过一些景点,也可能走许多冤枉路。为了方便游客,需要一套软件系统。

为游客提供以下功能:

①查询景点信息;②给出到某个景点的最佳路线;③给出到所有景点的最佳路线。

为系统管理员提供以下功能:

①修改景点信息;②撤销旅游线路。

问题分析:景点和旅游线路可以抽象为网状结构,景点作为图的顶点,旅游线路作为图的边,边上的权值作为景点间的距离,如下图所示。查询景点信息就是输出相应顶点的信息;给出到景点的最佳线路就是求最短路径问题;撤销旅游线路就是删除边;修改景点信息就是修改顶点信息。

程序简介:本程序包含两个模块

(1) 数据结构的设计  

#include <iostream>
#include<cstring>
#include<cstdlib>
#define MaxVertexNum 50
#define MaxValue 5000 //表示两点之间距离为无穷大 
#define INF 5000
#include <stack> 
using namespace std;typedef struct  //景点类型 
{
int no;   //景点编号 
char name[20];   //景点名称 
char desc[100];   //景点简介 
}DataType; typedef struct
{
int arcs[MaxVertexNum][MaxVertexNum];  //邻接矩阵
DataType data[MaxVertexNum];   //顶点信息 
int vexnum;   //顶点数 
}MGraph,*AdjMatrix;

(2)主程序模块

int main()
{
AdjMatrix g;
char name[20];
int choice,v,i;
int end;
int dist[MaxVertexNum],path[MaxVertexNum],S[MaxVertexNum];
g=new MGraph;
DataType d[]={{0,"午门","午门是紫禁城的正门,午门有五个门洞,明三暗五。"},{1,"太和殿","俗称金銮殿,是紫禁城最高最大的宫殿,是朝廷举行重大
典礼的地方。"},{2,"乾清宫","是后三宫中最大的宫殿,是清朝康熙帝以前的皇帝居住的
寝宫。"},{3,"御花园","宫中最大花园,供帝后玩耍。"},{4,"神武门","紫禁城北门,故宫博物院正门。"},{5,"养心殿","雍正时期,皇帝的寝宫。"},{6,"西六宫","西六宫包括永寿宫、翊坤宫、储秀宫、咸福宫、长春宫和
启祥宫。"},{7,"东六宫","东六宫包括景仁宫、承乾宫、钟粹宫、景阳宫、永和宫和
延禧宫。"}};
int m[][MaxVertexNum]={
{MaxValue,1500,MaxValue,MaxValue,MaxValue,MaxValue,MaxValue,MaxValue},
{1500,MaxValue,1000,MaxValue,MaxValue,800,MaxValue,MaxValue},
{MaxValue,1000,MaxValue,400,MaxValue,300,200,200},
{MaxValue,MaxValue,400,MaxValue,200,MaxValue,100,100},
{MaxValue,MaxValue,MaxValue,200,MaxValue,MaxValue,250,260},
{MaxValue,800,300,MaxValue,MaxValue,MaxValue,50,400},
{MaxValue,MaxValue,200,100,250,50,MaxValue,MaxValue},
{MaxValue,MaxValue,200,100,260,400,MaxValue,MaxValue}
};
CreateGraph(g,m,d,8);
PrintMatrix(g);
while(1)
{
cout<<"     故宫导游咨询系统"<<endl;
cout<<"**********主菜单**********"<<endl;
cout<<"     (1)显示所有景点信息"<<endl; 
cout<<"     (2)查询景点信息"<<endl; 
cout<<"     (3)给出到某个景点的最佳路线"<<endl; 
cout<<"     (4)给出到所有景点的最佳路线"<<endl; 
cout<<"     (5)修改景点信息"<<endl; 
cout<<"     (6)撤销旅游线路"<<endl; 		
cout<<"     (0)退出"<<endl; 
cout<<"请选择(1,2,3,4,5,6,0):";
cin>>choice;
if(choice<0||choice>6)
continue;
switch(choice)
{
case 1:
DisplayMatrix(g); break;
case 2:
cout<<"请输入景点名称:"; 
cin>>name;	
QueryVertex(g,name);
cout<<endl;			
break;
case 3:
cout<<"请输入你现在所在景点名称:";
cin>>name;
v=Locate(g,name);
cout<<"请输入你要去的景点名称:";
cin>>name;
end=Locate(g,name);
Dijkstra(g,dist,path,S,v);				Printpath(g,dist,path,v,end);
break; 
case 4:
cout<<"请输入你现在所在景点名称:";
cin>>name;
v=Locate(g,name);
Dijkstra(g,dist,path,S,v);
Printpath(g,dist,path,v); 
break;
case 5:
cout<<"请输入景点名称:";
cin>>name;
v=Locate(g,name); 
cout<<"请输入修改后的景点名称:";
cin>>name;
strcpy(g->data[v].name,name);
cout<<"请输入修改后的景点简介:";
cin>>name;
strcpy(g->data[v].desc,name);
break;
case 6:
cout<<"请输入起始景点名称:";
cin>>name;
v=Locate(g,name);
cout<<"请输入结束景点名称:";
cin>>name;
end=Locate(g,name);
g->arcs[v][end]=MaxValue;
break;
case 0:
exit(0);
default:
break;
} 
}
system("pause");
return 0;
}

(3)各个函数功能

  1. voidCreateGraph(AdjMatrix&g,intm[][MaxVertexNum],DataType d[],int n)       //根据图的顶点d和权值m创建邻接矩阵g
  2. void DisplayMatrix(AdjMatrix g) //显示所有景点信息
  3. void PrintMatrix(AdjMatrix g)       //打印邻接矩阵
  4. void QueryVertex(AdjMatrix g,char name[])    //根据景点名称查询景点信息
  5. int Locate(AdjMatrix g,char name[])   //根据景点名称查询景点序号
  6. void Dijkstra(AdjMatrix g,int dist[],int path[],int S[],int v)     //求最短路径长度
  7. void Printpath(AdjMatrix g,int dist[],int path[],int v)     // 输出最短路径长度和最短路径
  8. void Printpath(AdjMatrix g,int dist[],int path[],int v,int end)// 输出到某个顶点的最短路径长度和最短路径;

(4)系统界面显示效果

 

 

实验要求:

给出程序,使之能够实现基本的功能。

1. 显示所有景点信息

2. 查询景点信息

3. 给出到某个景点的最佳路线

4. 给出到所有景点的最佳路线

5. 修改景点信息

6. 撤销旅游路线

实验代码:

#include <iostream>
#include <cstring>
#include <cstdlib>
#define MaxVertexNum 5000
#define MaxValue 5000 //表示两点之间距离为无穷大 
#define INF 5000
#include <stack> 
using namespace std;typedef struct  //景点类型 
{int no;   //景点编号 char name[20];   //景点名称 char desc[100];   //景点简介 
}DataType; typedef struct
{int arcs[MaxVertexNum][MaxVertexNum];  //邻接矩阵DataType data[MaxVertexNum];   //顶点信息 int vexnum;   //顶点数 
}MGraph,*AdjMatrix;
void CreateGraph(AdjMatrix &g,int m[][MaxVertexNum],DataType d[],int n)
{g->vexnum=n;int i,j;for(i=0;i<g->vexnum;i++){g->data[i].no=d[i].no;strcpy(g->data[i].name,d[i].name);strcpy(g->data[i].desc,d[i].desc);for(j=0;j<g->vexnum;j++)g->arcs[i][j]=m[i][j];}
}
void PrintMatrix(AdjMatrix g)
{int i,j;cout<<"       午门 太和殿 乾清宫 御花园 神武门 养心殿 西六宫 东六宫"<<endl;for(i=0;i<g->vexnum;i++){cout<<g->data[i].name<<"  ";if(i==0) cout<<"  ";for(j=0;j<g->vexnum;j++) {if(g->arcs[i][j]==INF) cout<<"∞";else cout<<g->arcs[i][j];if(j==g->vexnum-1) cout<<endl;else cout<<"     "; }}
}
void DisplayMatrix(AdjMatrix g)
{int i;cout<<"景点编号  景点名称  景点简介"<<endl; for(i=0;i<g->vexnum;i++){cout<<g->data[i].no<<"  ";cout<<g->data[i].name<<"  ";cout<<g->data[i].desc<<endl;}
}
void QueryVertex(AdjMatrix g,char name[])	//根据景点名称查询景点信息
{int i,sign=0;for(i=0;i<g->vexnum;i++){if(strcmp(g->data[i].name,name)==0){cout<<"景点编号  景点名称  景点简介"<<endl;cout<<g->data[i].no<<"  ";cout<<g->data[i].name<<"  ";cout<<g->data[i].desc<<endl;sign=1;break;}}if(sign==0) cout<<"未找到该景点!"<<endl;
}
int Locate(AdjMatrix g,char name[])
{int i;for(i=0;i<g->vexnum;i++){if(strcmp(g->data[i].name,name)==0)return g->data[i].no;}
}
void Dijkstra(AdjMatrix g,int D[],int path[],int S[],int v0)	  //求最短路径长度
{int v,w,min,i;for(v=0;v<g->vexnum;++v){S[v]=0;D[v]=g->arcs[v0][v];if(D[v]<INF) path[v]=v0;else path[v]=-1;}S[v0]=1;D[v0]=0;for(i=1;i<g->vexnum;++i){min=INF;for(w=0;w<g->vexnum;++w)if(!S[w]&&D[w]<min){v=w;min=D[w];}S[v]=1;for(w=0;w<g->vexnum;++w)if(!S[w]&&(D[v]+g->arcs[v][w]<D[w])){D[w]=D[v]+g->arcs[v][w];path[w]=v; }}
}
void Printpath(AdjMatrix g,int D[],int path[],int v0)
{int i=0,num,q,j;if(i==v0) i++;while(i<g->vexnum){cout<<g->data[v0].name<<g->data[i].name<<"的最短路径长度:"<<D[i]<<",最短路径为:";int pa[g->vexnum];for(j=0;j<g->vexnum;j++)pa[j]=-1;num=0;q=i;while(path[q]!=v0){pa[num]=path[q];q=path[q];num++;}cout<<g->data[v0].name<<"-->";for(j=g->vexnum-1;j>=0;j--){	if(pa[j]!=-1) {cout<<g->data[pa[j]].name;cout<<"-->";}}cout<<g->data[i].name;i++;if(i==v0) i++;cout<<endl;}
}
void Printpath(AdjMatrix g,int D[],int path[],int v0,int i)
{int num,q,j;cout<<g->data[v0].name<<g->data[i].name<<"的最短路径长度:"<<D[i]<<",最短路径为:";int pa[g->vexnum];for(j=0;j<g->vexnum;j++)pa[j]=-1;num=0;q=i;while(path[q]!=v0){pa[num]=path[q];q=path[q];num++;}cout<<g->data[v0].name<<"-->";for(j=g->vexnum-1;j>=0;j--){	if(pa[j]!=-1) {cout<<g->data[pa[j]].name;cout<<"-->";}}cout<<g->data[i].name<<endl;
}int main()
{AdjMatrix g;char name[20];int choice,v,i;int end;int D[MaxVertexNum],path[MaxVertexNum],S[MaxVertexNum];g=new MGraph;DataType d[]={{0,"午门","午门是紫禁城的正门,午门有五个门洞,明三暗五。"},{1,"太和殿","俗称金銮殿,是紫禁城最高最大的宫殿,是朝廷举行重大典礼的地方。"},{2,"乾清宫","是后三宫中最大的宫殿,是清朝康熙帝以前的皇帝居住的寝宫。"},{3,"御花园","宫中最大花园,供帝后玩耍。"},{4,"神武门","紫禁城北门,故宫博物院正门。"},{5,"养心殿","雍正时期,皇帝的寝宫。"},{6,"西六宫","西六宫包括永寿宫、翊坤宫、储秀宫、咸福宫、长春宫和启祥宫。"},{7,"东六宫","东六宫包括景仁宫、承乾宫、钟粹宫、景阳宫、永和宫和延禧宫。"}};int m[][MaxVertexNum]={{MaxValue,1500,MaxValue,MaxValue,MaxValue,MaxValue,MaxValue,MaxValue},{1500,MaxValue,1000,MaxValue,MaxValue,800,MaxValue,MaxValue},{MaxValue,1000,MaxValue,400,MaxValue,300,200,200},{MaxValue,MaxValue,400,MaxValue,200,MaxValue,100,100},{MaxValue,MaxValue,MaxValue,200,MaxValue,MaxValue,250,260},{MaxValue,800,300,MaxValue,MaxValue,MaxValue,50,400},{MaxValue,MaxValue,200,100,250,50,MaxValue,MaxValue},{MaxValue,MaxValue,200,100,260,400,MaxValue,MaxValue}};CreateGraph(g,m,d,8);PrintMatrix(g);while(1){cout<<"     故宫导游咨询系统"<<endl;cout<<"**********主菜单**********"<<endl;cout<<"     (1)显示所有景点信息"<<endl; cout<<"     (2)查询景点信息"<<endl; cout<<"     (3)给出到某个景点的最佳路线"<<endl; cout<<"     (4)给出到所有景点的最佳路线"<<endl; cout<<"     (5)修改景点信息"<<endl; cout<<"     (6)撤销旅游线路"<<endl; 		cout<<"     (0)退出"<<endl; cout<<"请选择(1,2,3,4,5,6,0):";cin>>choice;if(choice<0||choice>6)continue;switch(choice){case 1:DisplayMatrix(g); break;case 2:cout<<"请输入景点名称:"; cin>>name;	QueryVertex(g,name);cout<<endl;			break;case 3:cout<<"请输入你现在所在景点名称:";cin>>name;v=Locate(g,name);cout<<"请输入你要去的景点名称:";cin>>name;end=Locate(g,name);Dijkstra(g,D,path,S,v);			Printpath(g,D,path,v,end);break; case 4:cout<<"请输入你现在所在景点名称:";cin>>name;v=Locate(g,name);Dijkstra(g,D,path,S,v);Printpath(g,D,path,v);break;case 5:cout<<"请输入景点名称:";cin>>name;v=Locate(g,name); cout<<"请输入修改后的景点名称:";cin>>name;strcpy(g->data[v].name,name);cout<<"请输入修改后的景点简介:";cin>>name;strcpy(g->data[v].desc,name);break;case 6:cout<<"请输入起始景点名称:";cin>>name;v=Locate(g,name);cout<<"请输入结束景点名称:";cin>>name;end=Locate(g,name);g->arcs[v][end]=MaxValue;g->arcs[end][v]=MaxValue;PrintMatrix(g);break;case 0:exit(0);default:break;} }system("pause");return 0;
}

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

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

相关文章

鸿蒙语言基础类库:【@ohos.util.Deque (线性容器Deque)】

线性容器Deque 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 Deque&#xff08;double ended queue&#xff09;根据循环队列的数据结构实现&#xff0c;符合先进先出以及先进后出的特点&…

Redis 实现高并发库存扣减方案

背景 公司的电商系统下单 操作库存是一个频繁操作&#xff0c;需要高效地扣减库存&#xff0c;把对销售库存的操作抽出来独立设计一个库存中心系统。 功能包括库存的批量添加、获取、下单、支付、回退等的操作。 解决的业务痛点 需要高效不超卖 方案 一、使用msql乐观锁 …

PostgreSQL 如何解决数据迁移过程中的数据类型不匹配问题?

文章目录 一、了解常见的数据类型不匹配情况1. 整数类型差异2. 浮点数类型差异3. 字符类型差异4. 日期和时间类型差异 二、解决数据类型不匹配的一般策略1. 数据转换2. 调整数据库表结构3. 数据清洗和预处理 三、PostgreSQL 中的数据类型转换函数1. 数值类型转换2. 字符类型转换…

解决虚拟机文件因快照占用硬盘空间较多的情况(压缩虚拟机文件,节省硬盘空间)

在使用虚拟机(Wmware)中&#xff0c;我们经常会在需要的时候拍摄虚拟机快照&#xff0c;尤其是虚拟机运行时的快照&#xff0c;动辄几个G&#xff0c;容易占满硬盘空间&#xff0c;那么有什么方法能够压缩虚拟机文件呢 下面是压缩后的存放虚拟机的文件夹 可以看到节约了大约2…

去除Win32 Tab Control控件每个选项卡上的深色对话框背景

一般情况下&#xff0c;我们是用不带边框的对话框来充当Tab Control的每个选项卡的内容的。 例如&#xff0c;主对话框IDD_TABBOX上有一个Tab Control&#xff0c;上面有两个选项卡&#xff0c;第一个选项卡用的是IDD_DIALOG1充当内容&#xff0c;第二个用的则是IDD_DIALOG2。I…

搜维尔科技:OptiTrack在NAB2024展示了一系列业界领先的媒体技术

广泛的显示和动作捕捉跟踪技术组合涵盖无与伦比的室内和室外 LED 解决方案、前沿技术演示以及最新的软件和硬件产品 可视化技术领域的全球领导者 Planar及其附属公司 3D 跟踪系统的全球领导者OptiTrack宣布&#xff0c;两家公司将在 2024 年全国广播协会 (NAB) 展会上展示其最全…

【fscan】Windows环境下的fscan安装与使用指南

Fscan是一款专为网络安全专业人士设计的多功能扫描工具&#xff0c;它能够帮助用户在Windows环境中执行高效的网络扫描任务。以下是关于Fscan的详细使用指南&#xff1a; 获取Fscan 要开始使用Fscan&#xff0c;首先需要从其GitHub仓库下载最新版本的预编译二进制可执行文件。…

Android布局简介

布局是一种可用于放置很多控件的容器&#xff0c;根据既定的规则决定内部控件的位置。当然&#xff0c;布局的内部也可以放置布局&#xff0c;即布局嵌套&#xff0c;布局嵌套可以实现一些比较复杂的界面。 Android中有多种编写程序界面的方式可供选择。Android Studio提供了相…

音视频质量评判标准

一、实时通信延时指标 通过图中表格可以看到&#xff0c;如果端到端延迟在200ms以内&#xff0c;说明整个通话是优质的&#xff0c;通话效果就像大家在同一个房间里聊天一样&#xff1b;300ms以内&#xff0c;大多数人很满意&#xff0c;400ms以内&#xff0c;有小部分人可以感…

Docker-compse的应用

1 docker-compose # 使用了docker 面临一个比较大的问题&#xff0c;如果一个djagno项目&#xff0c;使用mysql&#xff0c;redis&#xff0c;不要一次性把所有服务都放到一个容器中&#xff0c;每个服务一个容器&#xff0c;批量的管理多个容器&#xff0c;比较难以操作&…

go-redis源码解析:连接池原理

1. 执行命令的入口方法 redis也是通过hook执行命令&#xff0c;initHooks时&#xff0c;会将redis的hook放在第一个 通过hook调用到process方法&#xff0c;process方法内部再调用_process 2. 线程池初始化 redis在新建单客户端、sentinel客户端、cluster客户端等&#xff0c…

网站更新改版了

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;Leo杂谈 ✨特色专栏&#xff1a;MySQL学…

大模型/NLP/算法面试题总结2——transformer流程//多头//clip//对比学习//对比学习损失函数

用语言介绍一下Transformer的整体流程 1. 输入嵌入&#xff08;Input Embedding&#xff09; 输入序列&#xff08;如句子中的单词&#xff09;首先通过嵌入层转化为高维度的向量表示。嵌入层的输出是一个矩阵&#xff0c;每一行对应一个输入单词的嵌入向量。 2. 位置编码&…

潜在空间可视化(Latent space visualization)

在“深度学习”系列中&#xff0c;我们不会看到如何使用深度学习来解决端到端的复杂问题&#xff0c;就像我们在《A.I. Odyssey》中所做的那样。我们更愿意看看不同的技术&#xff0c;以及一些示例和应用程序。 1、引言 上次&#xff08;Autoencoders - Deep Learning bits #…

c++习题07-求小数的某一位

目录 一&#xff0c;问题 二&#xff0c;思路 三&#xff0c;代码 一&#xff0c;问题 二&#xff0c;思路 被除数a的类型设置为long long类型&#xff0c;a变量需要变大&#xff0c;需要更大的数据类型来存储除数b和指定的小数位置n为int类型&#xff0c;这两个变量的的…

Scissor算法-从含有表型的bulkRNA数据中提取信息进而鉴别单细胞亚群

在做基础实验的时候&#xff0c;研究者都希望能够改变各种条件来进行对比分析&#xff0c;从而探索自己所感兴趣的方向。 在做数据分析的时候也是一样的&#xff0c;我们希望有一个数据集能够附加了很多临床信息/表型&#xff0c;然后二次分析者们就可以进一步挖掘。 然而现实…

共生与变革:AI在开发者世界的角色深度剖析

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;已不再是遥不可及的概念&#xff0c;而是逐步渗透到我们工作与生活的每一个角落。对于开发者这一群体而言&#xff0c;AI的崛起既带来了前所未有的机遇&#xff0c;也引发了关于其角色定位的深刻讨论——AI…

【分布式系统】ceph部署(命令+截图巨详细版)

目录 一.存储概述 1.单机存储设备 2.单机存储的问题 3.商业存储 4.分布式存储​编辑 4.1.什么是分布式存储 4.2.分布式存储的类型 二.ceph概述 1.ceph优点 2.ceph架构 3.ceph核心组件 4.OSD存储后端 5.ceph数据存储过程 6.ceph版本发行生命周期 7.ceph集群部署 …

二叉树超详细解析

二叉树 目录 二叉树一级目录二级目录三级目录 1.树的介绍1.1树的定义1.2树的基本术语1.3相关性质 2.二叉树介绍2.1定义2.2 性质 3.二叉树的种类3.1 满二叉树3.2完全二叉树3.3 二叉查找树特点&#xff1a;二叉查找树的节点包含的基本信息&#xff1a; 3.4 平衡二叉树 4.二叉树的…

研华运动控制卡在LabVIEW中的应用

在现代工业和科研领域中&#xff0c;精密运动控制系统的需求日益增加。这些系统广泛应用于自动化生产线、精密机械加工、机器人控制、光学仪器调试和实验室自动化设备等诸多领域。本文以研华公司的运动控制卡为例&#xff0c;详细介绍其在LabVIEW中的应用&#xff0c;展示如何通…