数据结构与算法基础(青岛大学-王卓)(7)

news2024/12/23 23:58:04

差点就脱更了啊,微臣嘴干玩死,忙碌的暑假,还有头痛的new house, 我这junk food 也是吃一大堆,please不要长胖啊。
图的应用 这一章内容也是很多啊,概念真是比牛毛还多。。。看了两遍才缓过来啊 fighting


文章目录

    • @[toc]
      • 图的定义和基本术语
      • 图的抽象数据类型定义
      • 图的存储结构
        • 邻接矩阵
        • 邻接表链式表示法
          • 无向图:
          • 有向图
          • 邻接表链式的存储表示
          • **算法思想:**
          • 邻接表特点
          • 邻接矩阵和邻接表的关系
        • 十字链表和邻接多重表
          • 十字链表
          • 邻接多重表
      • 图的遍历
        • 定义
        • 深度优先遍历(DFS)
          • 算法实现
          • 算法效率
        • 广度优先遍历(BFS)
          • 实现过程
          • DFS/BFS算法比较
      • 图的应用
        • 生成树
        • 最小生成树
        • 构造最小生成树(Minium Spanning Tree) - MST 性质
          • 普里姆(prim)算法
          • 克鲁斯卡尔(Kruskal)算法
        • 最短路径
          • 定义
          • Dijistra算法
          • Floyd算法
        • 有向无环图(DAG)
          • 定义
          • 应用解决方法
          • AOV网 - 拓扑排序
          • AOE网 - 关键路径

在这里插入图片描述

图的定义和基本术语

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

有向树:当有向图中仅有1个顶点的入度为0,其余顶点的入度均为1,此时是一个有向树。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

权与网:图中边或弧所具有的相关数称为权。表明从一个顶点到另一个顶点的距离或耗费。带权的图称为网。

在这里插入图片描述
连通分量
在这里插入图片描述
在这里插入图片描述
极小连通子图
在这里插入图片描述

图的抽象数据类型定义

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

图的存储结构

  • 数组表示法:邻接矩阵(重点)
  • 链式存储结构:邻接表(重点),邻接多重表,十字链表

邻接矩阵

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

存储表示,用两个数组分别存储定点表和邻接矩阵

#define Maxlnt 32767  // 表示极大值,即∞
#define MVNum 100 // 最大顶点数
typedef char VerTexType; // 设顶点的数据类型为字符型
typedef int ArcType; // 假设边的权值类型为整型

typedef struct{
   VerTexType vexs[MVNum]; // 顶点表
   ArcType arcs[MVNum][MVNum]; // 邻接矩阵
   int vexnum, arcnum; // 图的当前点数和边数
}AMGraph; // Adjacency Matrix Graph

采用邻接矩阵表示法创建无向网

思想

  1. 输入总顶点数和总边数 。
  2. 依次输入点的信息存入顶点表中。
  3. 初始化邻接矩阵,使每个权值初始化为极大值。
  4. 构造邻接矩阵 。
// 采用邻接矩阵法创建无向网
Status CreateUDN (AMGraph &G) {
    cin>>G.vexnum>>G.arcnum; // 输入总顶点数,总边数
    for (i=0; i<G.vexnum; ++i)
        cin>>G.vex[i]; //依次输入点的信息,构造顶点表
    
    for (i=0;i<G.vexnum;++i) // 初始化邻接矩阵
        for (j=0;j<G.vexnum;++j)
            G.arcs[i][j] = Maxlnt; //边的权值均设为最大
    
    for (k=0;k<G.arcnum;++k) { //构造邻接矩阵
        cin>>v1>>v2>>w; 输入一条边的两个顶点以及权值
        i = LocateVex(G,v1);
        j = LocateVex(G,v2); // 确定v1,v2在G中位置
        G.arcs[i][j] = w; //边<v1,v2>的权值设为w
        G.arcs[j][i] = G.arcs[i][j]; // 无向网(图)的对称性质
    } // for
    return OK;
} // craeteUDN

无向网稍加改动就可以创建无向图/有向图/有向网

在这里插入图片描述

邻接矩阵优点:

  • 直观 、 简单 、 好理解
  • 方便检查任意一对顶点间是否存在边
  • 方便找任一顶点的所有 " 邻接点 " (有边直接相连的顶点)
  • 方便计算任一顶点的 " 度 "
    • 无向图:对应行(或列)非0元素的个数
    • 有向图:对应行非0元素的个数是 " 出度“,对应列非 0 元素的个数是 " 入度 ”

邻接矩阵缺点:

  • 不便增加/删除结点
  • 浪费空间 - 稀疏图(点多边少)
  • 浪费时间 - 统计稀疏图中多少条边

邻接表链式表示法

无向图:

在这里插入图片描述

特点:

  • 邻接表不唯一,因为边的顺序可变
  • 若无向图中有7个顶点 、e 条边,则其邻接表需 n 个头结点和 2e 个
    表结点。适宜存储稀疏图。
  • 无向图中顶点Vi的度为第 i 个单链表中的结点数。
有向图

在这里插入图片描述

邻接表链式的存储表示

在这里插入图片描述

==> AdjList v 相当于 VNode v[MVNum]

在这里插入图片描述在这里插入图片描述

算法思想:
  1. 输入总顶点数和总边数
  2. 建立顶点表
    • 依次输入点的信息存入顶点表中
    • 使每个表头结点的指针域初始化为 NULL
  3. 创建邻接表
    • 依次输入每条边依附的两个顶点
    • 确定两个顶点的序号 i 和 j ,建立边结点
    • 将此边结点分别插入到 vi 和 vj 对应的两个边链表的头部(头插法)
// 邻接链表创建无向网
Status CreateUDG(ALGraph &G){
    cin>>G.vexnum>>G.arcnum; // 输入顶点数、边数
    for (i=0;i<G.vexnum;++i){ // 初始化顶点表,顶点firstarc指针置空
        cin>>G.vertices[i].data;
        G.vertices[i].firstarc=NULL;
    }// for
    
    for (k=0;k<G.arcnum;++k){ // 依次输入每条边的信息并建立单链表
        cin>v1>>v2;
        i=LocateVex(G,v1); // 得到两个顶点在顶点表中的位置
        j=locateVex(G,v2);
        
        p1=new ArcNode; // 生成一个新的边结点*p1
        p1->adjvex=j; // 邻接点序号为j
        p1->nextarc=G.vertices[i].firstarc; // 头插法
        G.vertices[i].firstarc=p1; // 新结点插入顶点vi的边表头部
        
        p2=new ArcNode; // 无向网的对称性,相同的步骤生成新结点*p2
        p2->adjvex=i;
        p2->nextarc=G.vertices[j].firstarc;
        G.vertices[j].firstarc=p2;
    }// for
    return OK;
}
邻接表特点
  • 方便找任一顶点的所有"邻接点"
  • 节约稀疏图的空间 – 需要 N 个头指针+ 2E 个结点(每个结点至少 2 个域)
  • 方便计算任一顶点的“度"?·
    • 对无向图:是的
    • 对有向图:只能计算"出度";需要构造"逆邻接表"来方便计算"入度"
  • 不方便检查任意一对顶点间是否存在边
邻接矩阵和邻接表的关系

在这里插入图片描述

  • 联系:邻接表中每个链表对应于邻接矩阵中的一行,链表中结点个数等于一行中非零元素的个数。
  • 区别:
    • 对于任一确定的无向图,邻接矩阵是唯一的(行列号与顶点编号一致),但邻接表不唯一(链接次序与顶点编号无关)。
    • 邻接矩阵的空间复杂度为 O( n2 )而邻接表的空间复杂度为 O( n + e )。
  • 用途:邻接矩阵多用于稠密图;而邻接表多用于稀疏图

十字链表和邻接多重表

在这里插入图片描述

十字链表

Orthogonal List - 有向图的另一种链式存储形式,是邻接表和逆邻接表的结合体

在这里插入图片描述

邻接多重表

在这里插入图片描述

图的遍历

定义

从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算。

实质:找每个顶点的邻接点的过程

方法

  1. 深度优先搜索 (Depth First Search - DFS )
  2. 广度优先搜索(Breadth First Search - BFS)

深度优先遍历(DFS)

在这里插入图片描述

连通图的深度优先遍历类似于树的先根遍历

在这里插入图片描述

非连通图的遍历和连通图一样不过是以连通分量划分,一个连通分量访问完了再访问下一个直到全部访问。

算法实现

在这里插入图片描述

// 邻接矩阵实现深度优先遍历
void DFS(AMGraph G, int v) {  // G为邻接矩阵类型
    count<<v; visit[v]=True; // 访问输入的v顶点
    for (w=0; w<G.vexnum; w++){ // 依次检查邻接矩阵v所在的行
        if ((G.arcs[v][w]!=0)&&(!visit[w])){
            DFS(G,w); // w是v的邻接点,如果没被访问过就递归调用DFS
        }
    }
}
算法效率
  • 用邻接矩阵来表示图,遍历图中每一个顶点都要从头扫描该顶点所在行,时间复杂度为 O (n2)
  • 用邻接表来表示图,虽然有 2e 个表结点,但只需扫描 e 个结点即可完成遍历,加上访问n个头结点的时间,时间复杂度为 O(n+e)

结论:稠图适于在邻接矩阵上进行深度遍历, 稀疏图适于在邻接表上进行深度遍历。

广度优先遍历(BFS)

  • 方法:从图的某一结点出发,首先依次访问该结点的所有邻接点V1,V2…Vn, 再按这些顶点被访问的先后次序依次访问与它们相邻接的所有未被访问的顶点, 重复此过程,直至所有顶点均被访问为止。

在这里插入图片描述

实现过程

在这里插入图片描述在这里插入图片描述

// 按广度优先非递归遍历连通图G
void BFS(Graph G, int v){
    count<<v; visited[v]=True; // 访问结点v
    InitQueue(Q); // 辅助循环队列Q初始化,置空
    EnQueue(Q,v); // v进队
    while (!EmptyQueue(Q)){ // 当队列不空时循环
        DeQueue(Q,u); // 队头元素出队置为u
        for (w=FirstAdjVex(G,u); w>=0; w=NextAdjVex(G,u,w)){ // 依次寻找元素u的邻接元素
            if (!visited[w]){ // 邻接元素w没被访问时,标记访问flag并入队
                count<<w; visited[w]=True; EnQueue(Q,w)
            }
        }
    }
}

算法效率:邻接矩阵O(n2), 邻接表O(n+e) (n为元素,e为结点)

DFS/BFS算法比较

空间复杂度相同,都是O(n)(借用了堆栈或队列);时间复杂度只与存储结构(邻接矩阵或邻接表)有关,而与搜索路径无关。

图的应用

生成树

定义:所有顶点均由边连接在一起,但不存在回路的图。

在这里插入图片描述

  • 一个图可以有许多棵不同的生成树

  • 所有生成树具有以下共同特点:

    • 生成树的顶点个数与图的顶点个数相同,
    • 生成树是图的极小连通子图,去掉一条边则非连通;
    • 一个有n个顶点的连通图的生成树有n-1 条边,
    • 在生成树中再加一条边必然形成回路。
    • 生成树中任意两个顶点间的路径是唯一的
  • 含 n 个顶点n-1 条边的图不一定是生成树。

无向图的生成树
在这里插入图片描述

最小生成树

最小生成树:给定一个无向网络,在该网的所有生成树中,使得各边权值之和最小的那棵生成树称为该网的最小生成树,也叫最小代价生成树。
在这里插入图片描述

典型应用:n个城市(顶点)间建立通信网(连通网),铺设n-1条线路(边),每条线路的花费为(权值),如何费用最小?

构造最小生成树(Minium Spanning Tree) - MST 性质

MST性质内容: 设 N = (V, E) 是一个连通网, U是顶点集 V 的一个非空子集。若边 (u, v) 是一条具有最小权值的边,其中 u属于U, v属于V-U, 则必存在一棵包含边 (u, v) 的最小生成树。
在这里插入图片描述

普里姆(prim)算法

思想:

在这里插入图片描述

克鲁斯卡尔(Kruskal)算法

在这里插入图片描述

两种算法比较:

在这里插入图片描述

最短路径

定义

问题抽象:在有向网中 A 点(源点)到达 B 点(终点)的多条路径中,寻找一条各权值之和最小的路径,就是最短路径

最短路径与最小生成树不同,路径上不一定包含n个顶点,也不一定包含n-1条边。

第一类问题:两点间最短距离

在这里插入图片描述

第二类问题:某源点到其他各顶点最短路径
在这里插入图片描述

解决办法

  • 单源最短路径 – 用Dijkstra(迪杰斯特拉)算法
  • 所有顶点间的最短路径 – 用Floyd(弗洛伊德)算法
Dijistra算法
  1. 初始化:先找出从源点 v0 到各终点的直达路径 (v0,vk) ,即通过一条弧到达的路径。
  2. 选择: 从这些路径中找出一条长度最短的路径 (v0,u)。
  3. 更新:然后对其余各条路径进行适当调整.若在图中存在弧 (u,vk) ,且 (v0,u) + (u,vk) < (v0,vk)则以路径 (v0,u,vk) 代替(v0,vk )
  4. 在调整后的各条路径中,再找长度最短的路径,依此类推。

核心:按路径长度递增次序产生最短路径
在这里插入图片描述

算法步骤:
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

Floyd算法

思想:

  • 逐个顶点试探
  • 从vi到vj的所有可能路径中
  • 选出一条长度最短的路径

在这里插入图片描述

有向无环图(DAG)

定义

无环的有向图,directed Acycline Graph

注意与有向树和有向图的区别,一个顶点可以有多个前驱但是不存在环。

在这里插入图片描述

有向无环图常用来描述一个工程或系统的进行过程。一个工程可以分为若干个子工程,只要完成了这些子工程(活动),就可以导致整个工程的完成。

应用解决方法

AOV网(activity on vertex network, 顶点表示活动,边表示活动之间优先级制约关系) – 拓扑排序

AOE网(activity on edge, 边表示活动,顶点表示活动的开始/结束事件) – 关键路径

在这里插入图片描述

AOV网 - 拓扑排序

特点:

  • 若从 i 到 j 有一条有向路径,则 i 是 j 的前驱;j 是 i 的后继。

  • 若<i,j>是网中有向边,则 i 是 j 的直接前驱; j 是 i 的直接后继。

  • AOV 网中不允许有回路,因为如果有回路存在,则表明某项活动以自己为央条件,显然这是荒谬的。

如何判别 AOV 网中是否存在回路? ==> 拓扑排序

拓扑排序

在 AOV 网没有回路的前提下,我们将全部活动排列成一个线性序列,使得若 AOV 网中有弧< i, j >存在则在这个序列中, i 一定排在 j的前面,具有这种性质的线性序列称为拓扑有序序列,相应的拓扑有序排序的算法称为拓扑排序

步骤:

  • 在有向图中选一个没有前驱的顶点且输出之。

  • 从图中删除该顶点和所有以它为尾的弧。

  • 重复上述两步,直至全部顶点均已输出,或者当图中不存在无前驱的顶点为止

在这里插入图片描述
在这里插入图片描述

检测 AOV 网中是否存在环方法

  • 对有向图构造其顶点的拓扑有序序列,若网中所有顶点都在它的拓扑有序序列中,则该 AOV 网必定不存在环。反之,则存在环,如下图:

在这里插入图片描述

AOE网 - 关键路径

把工程计划表示为边表示活动的网络,即 AOE 网,用顶点表示事件,弧表示活动,弧的权表示活动持续时间。
在这里插入图片描述

关键路径:路径长度最长的路径。

路径长度:路径上各活动持续时间之和。

下图的概念先理解,后面要用:

  • 事件的最早发生时间ve(vj)
  • 事件最晚发生时间 vl(vj)
  • 活动的最早发生时间 e(i)
  • 活动的最晚发送时间 l(i)

l(i) - e(i) 表示完成活动 ai 的时间余量l(3) - e(3) = 90

在这里插入图片描述

关键活动: 关键路径上的活动,即l(i) == e(i)(即l(i) - e(i) = 0)的活动

在这里插入图片描述

如何计算ve(j), vl(i):

在这里插入图片描述

求解关键路径步骤:
在这里插入图片描述

讨论:

  1. 若网中有几条关键路径,则需加快同时在几条关键路径上的关键活动。如: a11, a10, a8, a7
  2. 如果一个活动处于所有的关键路径上,那么提高这个活动的速度就能缩短整个工程的完成时间。如: a1、a4
  3. 处有的关键路径上的活动完成时间不能缩短太多,否则会使原来的关键路径变成不是关键路径。这时,必须重新寻找关键路径。如: a1 由6 天变成 3 天,就会改变关键路径。
    在这里插入图片描述


TO BE CONTINUED…

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

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

相关文章

DoIP学习笔记系列:(六)满足AES128-CMAC算法的“安全认证”.dll生成实践

文章目录 1. 算法Demo2. 算法实现传送门 DoIP学习笔记系列:导航篇 AES128-CMAC算法在汽车电子控制单元的软件开发中涉及到安全相关的需求经经常用到,具体的算法原理请各位小伙伴自行百度,本篇主要向大家分享该算法如何集成到.dll文件中,在OTA、刷写等场景作为$27服务的安全…

Python实现透明隧道爬虫ip:不影响现有网络结构

作为一名专业爬虫程序员&#xff0c;我们常常需要使用隧道代理来保护个人隐私和访问互联网资源。本文将分享如何使用Python实现透明隧道代理&#xff0c;以便在保护隐私的同时不影响现有网络结构。通过实际操作示例和专业的解析&#xff0c;我们将带您深入了解透明隧道代理的工…

微服务相关面试题

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱写博客的嗯哼&#xff0c;爱好Java的小菜坤 &#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&#x1f44d;一下博主哦 &#x1f4dd;社区论坛&#xff1a;希望大家能加入社区共同进步…

自动化测试系列 —— UI测试

UI 测试是一种测试类型&#xff0c;也称为用户界面测试&#xff0c;通过该测试&#xff0c;我们检查应用程序的界面是否工作正常或是否存在任何妨碍用户行为且不符合书面规格的 BUG。了解用户将如何在用户和网站之间进行交互以执行 UI 测试至关重要&#xff0c;通过执行 UI 测试…

解决生成式AI落地之困,亚马逊云科技提供完整解决方案

生成式AI技术无疑是当前最大的时代想象力之一。 资本、创业者、普通人都在涌入生成式AI里去一探究竟&#xff1a;“百模大战”连夜打响&#xff0c;融资规模连创新高&#xff0c;各种消费类产品概念不断涌现……根据Bloomberg Intelligence 的报告&#xff0c;2022年生成式AI 市…

[HDLBits] Exams/m2014 q4c

Implement the following circuit: module top_module (input clk,input d, input r, // synchronous resetoutput q);always(posedge clk) beginif(r) q<1b0;elseq<d;end endmodule

万字长文·通俗易懂·一篇包掌握——输入/输出·文件操作(c语言超详细系列)(二)

前言&#xff1a;Hello&#xff0c;大家好&#x1f618;&#xff0c;我是心跳sy&#xff0c;上一节我们主要学习了格式化输入输出的基本内容&#xff0c;这一节我们对格式化进行更加深入的了解&#xff0c;对文件概念进行介绍&#xff0c;并且对输入、输出与文件读写的基本概念…

推断统计(独立样本t检验)

这里我们是采用假设检验中的独立样本t 检验来比较两个独立正态总体均值之间是否存在显著性差异&#xff0c;以比较城市与农村孩子的心理素质是否有显著差异为例 。 这里我们首先是假设城市孩子与农村孩子心理素质无显著差异&#xff0c;但是此时方差是否齐性是未知的&#xff0…

IntelliJ IDEA(简称Idea) 基本常用设置及Maven部署---详细介绍

一&#xff0c;Idea是什么&#xff1f; 前言&#xff1a; 众所周知&#xff0c;现在有许多编译工具&#xff0c;如eclipse&#xff0c;pathon, 今天所要学的Idea编译工具 Idea是JetBrains公司开发的一款强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于Java…

4.文件保护

第四章 文件管理 4.文件保护 ​   加密保护&#xff1a;可以用“密码”与文件的原始数据依次做异或运算。这样可以把整个文件的数据都进行加密&#xff0c;所以系统中保存的并不是文件的原始数据&#xff0c;而是保存了对文件进行加密之后的数据&#xff0c;所以如果一个用户…

Windows Oracle21C与PLSQL Developer 15配置

1、下载Oracle21c并安装 下载地址&#xff1a;https://www.oracle.com/database/technologies/oracle21c-windows-downloads.html 2、下载PLSQL Developer 15并安装 下载地址&#xff1a;https://www.allroundautomations.com/products/pl-sql-developer/#pricing 3、配置O…

Android Studio瀑布流实现

效果&#xff1a; ImageDetail class package com.example.waterfallflow; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.ImageView;public class ImageDetail extends Activity{Overrideprotected void …

SCAU操作系统知识点之(十一)I/O调度和磁盘调度

1、程序控制I/O&#xff1a;CPU忙等I/O结束&#xff0c;CPU与设备串行工作。 2、中断驱动I/O&#xff1a;各种设备通用&#xff0c;中断次数多。 3、直接存储器访问DMA原理与I/O过程。 列出并简单定义执行I/O的三种技术。 程序控制I/O&#xff1a; 处理器代表进程向I/O模…

【Java】使用JavaSE实现图书管理系统详解

目录 1.前言 2.初步框架搭建 3.Book 书架和书架里的书 3.1书本 3.2书架 4.User 用户和管理员 4.1初步想法 4.2用户 4.3管理员 4.4main函数中如何调用不同的成员 5.方法的调用 5.1接口 5.2增加图书 5.3借阅图书 5.4删除图书 5.5退出系统 5.6查找图书 5.7归还图书…

利用python实现激光雷达LAS数据滤波的7种方式,使用laspy读写

激光雷达&#xff08;LiDAR&#xff09;数据在实际应用中可能受到噪声和不完美的测量影响&#xff0c;因此数据去噪和滤波方法变得至关重要&#xff0c;以提高数据质量和准确性。以下是一些常用的激光雷达数据去噪与滤波方法。 原始数据如下&#xff1a; 1. 移动平均滤波&…

springcloud3 hystrix实现服务降级,熔断,限流以及案例配置

一 hystrix的作用 1.1 降级&#xff0c;熔断&#xff0c;限流 1.服务降级&#xff1a; A方案出现问题&#xff0c;切换到兜底方案B&#xff1b; 2.服务熔断&#xff1a;触发规则&#xff0c;出现断电限闸&#xff0c;服务降级 3.服务限流&#xff1a;限制请求数量。 二 案例…

uni-app中使用pinia

目录 Pinia 是什么&#xff1f; uni-app 使用Pinia main.js 中引用pinia 创建和注册模块 定义pinia方式 选项options方式 定义pinia 页面中使用 pinia选项options方式 函数方式 定义pinia 页面中使用 函数方式 定义的pinia Pinia 是什么&#xff1f; Pinia&#xff0…

ES中倒排索引机制

在ES的倒排索引机制中有四个重要的名词&#xff1a;Term、Term Dictionary、Term Index、Posting List。 Term&#xff08;词条&#xff09;&#xff1a;词条是索引里面最小的存储和查询单元。一段文本经过分析器分析以后就会输出一串词条。一般来说英文语境中词条是一个单词&a…

利用安全区域的概念解决移动端兼容不同手机刘海的问题

移动端 安全区 在做移动端的项目时&#xff0c;由于不同的手机设备设置的不同&#xff0c;有些手机在上方有刘海的设计&#xff0c;我们需要做适配&#xff0c;即把想要展示的内容放在安全区域内展示。 1.自定义导航栏 在pages.json中修改如下配置 {"path":"…

QEMU源码全解析37 —— Machine(7)

接前一篇文章&#xff1a;QEMU源码全解析36 —— Machine&#xff08;6&#xff09; 本文内容参考&#xff1a; 《趣谈Linux操作系统》 —— 刘超&#xff0c;极客时间 《QEMU/KVM》源码解析与应用 —— 李强&#xff0c;机械工业出版社 特此致谢&#xff01; 上回书讲完了q…