数据结构理论

news2025/1/17 21:55:44

内容来源青岛大学数据结构与算法课程,链接:数据结构与算法基础(青岛大学-王卓)_哔哩哔哩_bilibili

绪论

数据结构概述

数据结构和算法的定义:我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个功能(比如查找某个元素,删除某个元素,对所有元素进行排序)而执行的相应操作,这个相应的操作也叫算法

数据结构 = 个体 + 个体的关系

算法 = 对存储数据的操作

算法

解题的方法和步骤

算法的描述:

  1. 自然语言(英语,中文)

  2. 流程图(传统流程图,NS流程图)

  3. 伪代码,类语言:类C语言

  4. 程序代码:C语言程序,java语言程序等

传统流程图:

NS流程图:

算法特性:

  1. 有穷性:一个算法必须总在执行有穷步之后结束,且每一步都在有穷时间内完成

  2. 确定性:算法中的每一条指令必须有确切的含义,没有二义性,在任何条件下,只有唯一的一条执行路径,即对于相同的输入只能得到相同的输出

  3. 可行性:算法是可执行的,算法描述的操作可以通过已经实现的基本操作执行有限次来实现

  4. 输入:一个算法有零个或多个输入

  5. 输出:一个算法有零个或多个输出

算法设计的要求:

  1. 正确性

  2. 可读性

  3. 健壮性

  4. 高效性

衡量算法的标准:时间复杂度、空间复杂度、难易程度和健壮性

时间复杂度,记作 ​T(n)=O(f(n))

大概程序要执行的次数,而非执行的时间

最坏时间复杂度:指在最坏的情况下,算法的时间复杂度

平均时间复杂度:指在所有可能输入实例在等概率出现的情况下,算法的期望运行时间

最好时间复杂度:指在最好的情况下,算法的时间复杂度

大O加法规则和乘法规则,计算算法的时间复杂度:

时间复杂度 ​T(n) 按数量级递增顺序为:​O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<...<O(O^k)<O(2^n)

空间复杂度,记作 ​S(n)=O(f(n))

算法执行过程中大概所占用的最大内存

算法要占用的空间:

  1. 算法本身要占据的空间,输入/输出,指令,常数,变量等

  2. 算法要使用的辅助空间(临时变量的空间)

数据结构的地位,特点

数据结构是软件中最核心的课程

程序 = 数据的存储 + 数据的操作 + 可以被计算机执行的语言

预备知识

地址:内存单元的编号,从0开始的非负整数,范围(0—FFFFFFFF[0—4G-1])

指针

  1. 指针就是地址,地址就是指针

  2. 指针变量就是存放内存单元地址的变量

  3. 指针的本质是一个操作受限的非负整数

分类

  1. 基本类型的指针

  2. 指针和数组的关系

下标和指针的关系:a[i] <<==>> *(a+i)

动态内存的分配和释放

需要加载头文件:<stdlib.h>

C++动态内存分配和释放

C++中的参数传递

参数为引用类型是与C语言的不同之处:

(1)传递引用给函数与传递指针的效果是一样的,形参变化实参也发生变化

(2)引用类型作形参,在内存中并没有产生实参的副本,它直接对实参操作;而一般变量作参数,形参与实参就占用不同的存储单元,所以形参变量的值是实参变量的副本。因此,当参数传递的数据量较大时,用引用比用一般变量传递参数的时间和空间效率都好。

(3)指针参数虽然也能达到与使用引用的效果,但在被调函数中需要重复使用“指针变量名”的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。

逻辑结构:

  1. 集合结构

  2. 线性结构

  3. 树形结构

  4. 图状结构

存储结构:

  1. 顺序结构

  2. 链式结构

  3. 索引结构

  4. 散列结构

抽象数据类型:

  1. 数据对象

  2. 数据关系

  3. 基本操作

抽象数据类型 = 数据的逻辑结构+抽象运算(运算的功能描述)

如何定义抽象数据类型?

例:圆的抽象数据类型

抽象数据类型的实现:

线性表

线性表的定义和特点

线性表是具有相同特性的数据元素的一个有限序列

线性表的逻辑特征:

案例

一元多项式的运算

图书信息管理系统

线性表的类型定义(线性表的抽象数据类型)

线性表的初始化,销毁一个线性表,重置线性表:

判断线性表是否为空表,求一个线性表的长度:

获取元素,查找和定位:

求一个元素的前驱,求一个元素的后继:

在线性表中插入一个元素:

删除第i个的元素,对每个元素遍历:

线性表的顺序表现和实现

线性表的顺序表示又称为顺序存储结构或顺序映像

顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构

线性表的第 ​1 个数据元素 ​a1 的存储位置,称作线性表的起始位置或基地址

线性表顺序存储结构占用一片连续的存储空间

LOC(ai)=LOC(a1)+(i-1)*l​;​l 为每个元素的存储单元

顺序表的特点:以物理位置相邻表示逻辑关系,任一元素均可随机存取

线性表定义模板:


线性表的初始化:

线性表的销毁:

求线性表的长度和判断线性表是否为空:

顺序表的取值:

顺序表的查找算法(顺序查找法):


ASL=(n+1)/2​(含有 ​n 个记录的表)

T(n) =O(n)

顺序表的插入算法:

平均移动次数​=n/2

T(n) = O(n)

顺序表的删除算法:

平均移动次数=(n-1)/2

T(n) = O(n)

顺序表的优缺点:

线性表的链式表示和实现

线性表的链式表示又称为非顺序映像或链式映像

用一组物理位置任意的存储单元来存放线性表的数据元素。

这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的

链表中元素的逻辑次序和物理次序不一定相同

单链表是由头指针唯一确定,因此单链表可以用头指针的名字来命名

结点:数据元素的存储映像

各结点由两个域组成:

  1. 数据域:存储元素数值数据

  2. 指针域:存储直接后继结点的存储位置

链表:n​ 个结点由指针链组成一个链表。它是线性表的链式存储映像,称为线性表的链式存储结构

单链表:结点只有一个指针域的链表,称为单链表或线性链表

带头结点的单链表(非空表和空表):

单链表的存储结构:

(定义链表L通常用LinkList L;定义结点指针通常用LNode *p;)

单链表的初始化(即构造一个空表):

判断一个链表是否为空:

单链表的销毁:

单链表的清空:


求单链表的表长:


单链表的取值:(取单链表中第 ​i 个元素的内容)

单链表的查找:(查找指定数据的位置)

1.返回地址:

2.返回位置序号:

平均时间效率为 ​O(n)

单链表的插入:(在第i个结点前插入新结点)

因为链表不需要移动元素,只需要修改指针,一般情况下时间复杂度为 ​O(1)

单链表的删除:(删除第 ​i 个结点)

因为链表不需要移动元素,只需要修改指针,一般情况下时间复杂度为 O(1)

但是,如果要在单链表中进行前插或删除操作,由于要从头查找前驱结点,所耗时间复杂度为 ​O(n)

单链表的建立:

  1. 头插法

    时间复杂度为​ O(n)

  2. 尾插法

    时间复杂度为 O(n)

双链表:结点有两个指针域的链表,称为双链表

双向链表的结构定义:

双向链表结构的对称性及操作:

双向链表的插入:


双向链表的删除:

循环链表:首尾相接的链表称为循环链表

带尾指针的循环链表:

两个带尾指针的循环链表的合并:

时间复杂度为 O(1)

头指针:是指向链表中第一个结点的指针

首元节点:是指链表中存储第一个数据元素 a1 ​ 的结点

头结点:是在链表的首元结点之前附设的一个结点

链表的特点:

链式存储结构的优缺点:

存储密度:

顺序表和链表的比较

线性表的应用

线性表的合并:


有序表的合并:

  1. 用顺序表实现有序表的合并:

  2. 用链表实现有序表的合并:

案例分析与实现

一元多项式的运算:用线性表只存系数,指数为底标i

稀疏多项式的运算:用顺序表存系数和指数,但空间浪费较大;用链表来实现

图书信息管理:顺序表或链表

栈和队列

栈和队列的定义和特点

栈和队列是限定插入和删除只能在表的“端点”进行的线性表

栈只能插入和删除最后一个元素(后进先出)

队列只能插入最后一个元素和只能删除第一个元素(先进先出)

栈和队列是线性表的子集(是插入和删除位置受限的线性表)

栈的定义和特点:

栈(stack)是一个特殊的线性表,是限定仅在一端(通常是表尾)进行插入和删除操作的线性表,又称为后进先出的线性表,简称LIFO结构

表尾(即an端)称为栈顶Top,表头(a1端)称为栈底Base

插入元素到栈顶(即表尾)的操作,称为入栈

从栈顶(即表尾)删除最后一个元素的操作,称为出栈

“入”=压入=PUSH(x) “出”=弹出=POP(y)

队列的定义和特点:队列(queue)是一种先进先出的线性表,在表一端插入(表尾),在另一端(表头)删除,简称FIFO结构

栈的应用

  1. 进制转换(余数先进后出):

  2. 括号匹配的检验:

  3. 表达式求值(算符优先算法):

队列的应用

舞伴问题

栈的表示和操作的实现

栈的顺序存储---顺序栈

栈的链式存储---链栈

顺序栈:

  • Top指针:指向栈顶元素之上的下标地址

  • Base指针:指向栈底元素在顺序表中的位置

  • Stacksize表示栈可使用的最大容量

  • 上溢:栈已经满,又要压入元素

  • 下溢:栈已经空,还要弹出元素

顺序栈的表示:

顺序栈的初始化:

顺序栈的销毁:

判断顺序栈是否为空栈:

求顺序栈的长度:

清空顺序栈:

顺序栈的入栈:

顺序栈的出栈:

链栈:

  • 链栈是运算受限的单链表,只能在链表头部进行操作

  • 链表的头指针就是栈顶

  • 不需要头结点

  • 基本不存在栈满的情况

  • 空栈相当于头指针指向空

  • 插入和删除仅在栈顶处执行

链栈的表示:(链栈的指针域指针的方向与单链表中指针的方向相反)

链栈的初始化:

判断链栈是否为空:

链栈的入栈:

链栈的出栈:

取栈顶元素:

栈与递归

递归:二叉树,广义表,斐波那契数列,求阶乘,迷宫问题,Hanoi塔问题

递归问题——用分治法求解

分治法:对于一个较为复杂的问题,能够分解成几个相对简单的且解法相同或类似的子问题来求解

递归的优缺点:

尾递归->循环结构:

单向递归->循环结构:

队列的表示和操作的实现

队列的存储结构为链队或顺序队(常用循环顺序队)

真溢出:在顺序队列中,由于数组空间不够而产生的溢出叫真溢出

假溢出:顺序队列因多次入队列和出队列操作后出现的有存储空间但不能进行入队列操作的溢出称为假溢出

顺序队列:

顺序队列(循环队列)的表示:

循环队列:

循环队列解决队满队空时判断方法——少用一个元素空间:

循环队列的初始化:

求循环队列的长度:

循环队列的入队:

循环队列的出队:

取对头元素:

链队:

链队列的类型定义:

链队列的初始化:

链队列的销毁:

链队列的入队:

链队列的出队:

求链队列的对头元素:

串、数组和广义表

串的定义

串——零个或多个任意字符组成的有限序列

真子串是指不包含自身的所有子串

主串:包含子串的串相应地称为主串

字符位置:字符在序列中的序号为该字符在串中的位置

子串位置:子串第一个字符在主串中的位置

空格串:由一个或多个空格组成的串,与空串不同

所有的空串都是相等的

串的类型定义,存储结构及其运算

顺序串

串的顺序存储结构:

链串

串的链式存储结构:

串的模式匹配算法:

算法目的:确定主串中所含子串(模式串)第一次出现的位置

算法种类:

  1. BF算法(穷举法)(重点掌握)

  2. KMP算法(速度快)

BF算法:(算法思路是从主串(S)的每一个字符开始依次与子串(T)的字符进行匹配)

时间复杂度 ​O(m*n)

KMP算法:(主串S的指针i不必回溯)(提高算法效率)

时间复杂度提高到 ​O(m+n)

Next[j]求法:


Next函数的改进:

数组

多维数组:

以行序为主序:(c,Java)LOC(I,j)=LOC(0,0)+(n*i+j)*sizeof

以列序为主序

特殊矩阵的压缩存储:为多个相同的非零元素只分配一个存储空间;对零元素不分配空间(对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等)

稀疏矩阵:矩阵中非零元素的个数较少(一般小于5%)

对称矩阵:(将上三角或下三角矩阵存入一维数组中),数组的下标表示该数前面还有多少数

三角矩阵:

对角矩阵:


稀疏矩阵:

  1. 三元组法(i,j,ai),存储各非零元素的值,行列位置以及总行数总列数以及非零元素的个数

  2. 十字链表:两个头指针(一个行的头指针一个列的头指针)(两个指针域:一个指向该数同一列的下个数,另一个指向该数同一行的下个数)

广义表


F=(a,F)递归广义表

广义表的性质:


广义表和线性表的区别:

广义表的基本运算:

树和二叉树

树和二叉树的定义

树型结构:

树的定义:(递归的定义)

树的表示方式;

树的基本术语:


二叉树的定义:

二叉树的结构最简单,规律性最强;

所有树都能转为唯一对应的二叉树,不失一般性;

二叉树和树的区别:

思考:3个结点的二叉树有5种形态,3个结点的树有2种形态

二叉树的5种基本形态:

案例

数据压缩问题:(哈夫曼树)

利用二叉树求表达式的值:

二叉树的性质和存储结构

第 i​ 层至少有1个结点

深度为 k​ 时至少有 ​k 个结点

满二叉树:

满二叉树在同样深度的二叉树中结点个数最多

满二叉树在同样深度的二叉树中叶子结点个数最多

完全二叉树:


二叉树的顺序存储:(适合满二叉树和完全二叉树)

二叉树的链式存储:

  1. 如果经常操作左右孩子(二叉链表)

    在 n​ 个结点的二叉链表中,有 ​(n+1) 个空指针域

  2. 如果经常操作双亲(三叉链表)

遍历二叉树和线索二叉树

遍历二叉树:顺着某一条搜索路径巡防二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次

二叉树求算术表达式(3种遍历)

时间复杂度 ​O(n) 空间复杂度 O(n)

先序遍历算法实现:


中序遍历算法实现:

后序遍历算法实现:

中序遍历非递归算法:(栈)

二叉树的层次遍历算法:(队列)

二叉树的建立:(空用#表示)

复制二叉树:

计算二叉树深度:

计算二叉树结点总数:

计算二叉树叶子结点数:

线索二叉树:

先序线索二叉树:

线索二叉树增设头结点:

树和森林

树的存储结构:

  1. 双亲表示法:(操作经常要找双亲)

  2. 孩子链表(经常操作孩子)

    带双亲的孩子链表:

  3. 孩子兄弟表示法(二叉树表示法,二叉链表表示法)

树与二叉树的交换:

将树转化成二叉树:

将二叉树转换成树:

森林与二叉树的转化:

树的遍历:

  1. 先序遍历

  2. 后序遍历

  3. 层次遍历

森林的遍历:

  1. 先序遍历

  2. 中序遍历

哈夫曼树及应用

判断树:用于描述分类过程的二叉树

哈夫曼树的基本概念:

哈夫曼树的构造算法:(贪心算法思想)

哈夫曼树构造算法的实现:

哈夫曼编码:

前缀码

哈夫曼编码


哈夫曼编码的算法实现:

文件的编码和解码:

编码:

解码:

堆必须是一棵完全二叉树

堆的第二性质:堆序性,根据堆序性可以把堆分为两类,分别为大根堆和小根堆,在大根堆中,每个父节点元素都要大于他的子节点元素,在小根堆中,每个父节点元素都要小于他的子节点元素

堆的储存:

若父节点为i,则左子节点下标为2i+1,右子节点下标为2i+2

堆的基本操作:上滤和下滤

下滤:将根节点下移的操作

上滤:将子节点上移的操作

堆排序:


堆的建立(将无序序列转化为堆):

堆排序算法:

时间复杂度为 ​O(nlogn) 不管最好还是最坏时间复杂度都一样

空间复杂度为 O(1)​ 不稳定的排序方式

图的定义和基本术语

图的存储结构

邻接矩阵表示法:

无向图的邻接矩阵表示法:

有向图的邻接矩阵表示法:


网(即有权图)的邻接矩阵表示法:

邻接矩阵的存储表示:

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



邻接矩阵的空间复杂度为 ​O(n^2)

邻接表:

邻接表表示法(链式):

无向图:

有向图:

图的邻接表存储表示:


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


邻接矩阵多用于稠密图,而邻接表多用于稀疏图

十字链表:对有向图邻接表的缺点(求结点的度困难)的改进


邻接多重表:对无向图邻接表的缺点(每条边都要存储两遍)的改进

图的遍历

深度优先搜索(DFS):

采用邻接矩阵表示图的深度优先搜索遍历:

广度优先搜索(BFS):

按广度优先非递归遍历连通图:

图的应用

(1)最小生成树:

MST性质:

构造最小生成树方法一:普里姆(Prim)算法

普里姆(Prim)算法时间复杂度为 O(n^2)​(n为顶点数)(适合于稠密图)

构造最小生成树方法二:克鲁斯卡尔(Kruskal)算法

克鲁斯卡尔(Kruskal)算法时间复杂度为 O(eloge)​(e为边数)(适合于稀疏图)

(2)最短路径:

单源最短路径——用Dijkstra(迪杰斯特拉)算法:

Dijkstra算法时间复杂度为 O(n^2)

所有顶点间的最短路径—— Floyd(弗洛伊德)算法

(3)拓扑排序

有向无环图:无环的有向图,简称DAG图

AOV网和AOE网:(AOV网解决拓扑排序,AOE网解决关键路径)

AOV网的特点:

拓扑排序:


(4)关键路径

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

找关键活动:

关键活动构成的路径就是关键路径

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

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

相关文章

008.精读《Apache Paimon Docs - Table w/o PK》

文章目录 1. 引言2. 基本概念2.1 定义2.2 使用场景 3. 流式处理3.1 自动小文件合并3.2 流式查询 4. 数据更新4.1 查询4.2 更新4.3 分桶附加表 5 总结 1. 引言 通过本文&#xff0c;上篇我们了解了Apache Paimon 主键表&#xff0c;本期我们将继续学习附加表&#xff08;Append…

硬件选型规则

光源选型: 先用型号中带H的&#xff0c;没有的选标准的. 光源和光源控制器的搭配需要确保接口一致。 根据型号表中的最佳工作距离和相机的尺寸。 光源控制器选型&#xff1a; 首先选择海康风格系列光源控制器考虑与光源的接口匹配。功率应该满足接近光源功率。检查是否退市…

数据分析系列---requests的使用

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 主环境和虚拟环境 主环境是电脑上安装的python环境 虚拟环境在项目中可以实现环境的隔离&#xff0c;假设DemoA和DemoB分别用到了某个三方库1.0和2.0版本&#xff0c;那么在一个…

selenium常见接口函数使用

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;测试_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 1. 查找 查找方式 css_s…

深度学习之预备知识

深度学习是关于优化的学习。对一个带有参数的模型&#xff0c;找到其中能拟合数据最好的模型。 一、数据操作 张量&#xff1a;表示一个由数值组成的数组&#xff0c;这个数组可能有多个维度。具有一个轴的张量对应数学上的向量&#xff0c;具有两个轴的张量对应数学上的矩阵&…

【论文相关】期刊/会议 信息检索——IEEE各期刊投稿要求(待完善)

[吐槽] 外文期刊/会议网站的真的很难找&#xff0c;想要了解的信息很难检索&#xff1b;比如 旗下子期刊官网、子期刊具体要求不同等问题。 TIFS期刊 (IEEE Transactions on Information Forensics and Security) 期刊官网链接&#xff1a;https://mc.manuscriptcentral.com/…

ElementUI:el-tabs 切换之前判断是否满足条件

<div class"table-card"><div class"card-steps-class"><el-tabsv-model"activeTabsIndex":before-leave"beforeHandleTabsClick"><el-tab-pane name"1" label"基础设置"><span slot&…

入职体检心电图不合格的常见情况

心电图&#xff08;ECG&#xff09;是通过记录心脏的电活动来评估心脏健康状况的一项常见检查。它是体检中常见的检查项目之一&#xff0c;尤其对于从事需要高度体力活动的职业&#xff08;如医护、公安、消防等&#xff09;或对心脏健康有特别要求的行业&#xff0c;心电图的结…

释放 AI 潜能:掌握提问策略,让 AI 事半功倍

在这个 AI 大模型快速迭代的时代&#xff0c;人人都能免费使用 AI。然而&#xff0c;很多人却发现&#xff0c;自己与 AI 互动的效果并不理想。这并非 AI 的问题&#xff0c;而是方法不对。输入决定输出&#xff0c;只有掌握正确的提问策略&#xff0c;才能真正释放 AI 助手的生…

AI赋能:构建安全可信的智能电子档案库

在档案的政策与法规上&#xff0c;《中华人民共和国档案法》2020年修订新增&#xff0c;对电子档案的合法要件、地位和作用、安全管理要求和信息化系统建设等方面作出了明确规定&#xff0c;保障数字资源的安全保存和有效利用。 日前&#xff0c;国家档案局令第22号公布《电子…

【计算机网络】实验12:网际控制报文协议ICMP的应用

实验12 网际控制报文协议ICMP的应用 一、实验目的 验证ping命令和tracert命令的工作原理。 二、实验环境 Cisco Packet Tracer模拟器 三、实验过程 1.构建网络拓扑并进行信息标注&#xff0c;将所需要配置的IP地址写在对应的主机或者路由器旁边&#xff0c;如图1所示。 图…

【C语言】程序设计--算法

文章目录 1. 判断两个数的大小并交换2. 计算三角形面积3. 根据x的值计算y4. 字符大小写转换5. 百钱百鸡问题6. 计算公式y的值7. 输出所有的水仙花数8. 计算n的阶乘9. 下三角数据10. 斐波那契数列11. 学生成绩统计12. 数组的平均值1. 判断两个数的大小并交换 介绍: 从键盘输入…

使用IntelliJ IDEA开发Gradle插件并发布到本地

博主所用软件版本为&#xff1a; IntelliJ IDEA 2024.1.4 (Community Edition) Android Studio Ladybug Feature Drop | 2024.2.2 Beta 1 1、制作gradle插件&#xff08;IntelliJ IDEA 2024.1.4&#xff09; 新建groovy工程&#xff0c;File–>New–>Project… 右键点…

Trimble X9三维激光扫描仪高效应对化工厂复杂管道扫描测绘挑战【沪敖3D】

化工安全关系到国计民生&#xff0c;近年来随着化工厂数字化改革不断推进&#xff0c;数字工厂逐步成为工厂安全管理的重要手段。而化工管道作为工厂设施的重要组成部分&#xff0c;由于其数量多、种类繁杂&#xff0c;一直是企业管理的重点和难点。 传统的化工管廊往往缺乏详…

如何实现远程对主机进行关机、重启操作

WGCLOUD是一款开源免费的运维工具&#xff0c;使用简单&#xff0c;安装方便 我们主要通过 WGCLOUD监控系统的指令下发模块&#xff0c; 来实现关机和重启主机的操作 这里以Linux主机为例说明&#xff0c;Windows也是一样的&#xff0c;只是重启主机的命令不同而已&#xff0c…

【批处理脚本】更改Windows系统中的 hosts 解析文件

概述 作用 修改 Windows 系统中的 hosts 文件&#xff0c;可以实现 插入 或 删除 条目。该脚本允许用户以管理员权限执行&#xff0c;将特定的域名解析到指定的 IP 地址 应用场景 非常适用于需要频繁或批量修改 hosts 文件的场景&#xff1a; 屏蔽网站、域名重定向、DNS 污染防…

无人机舵机驱动控制原理!

一、舵机的基本结构和工作原理 舵机是一种位置&#xff08;角度&#xff09;伺服的驱动器&#xff0c;由电子控制与机械控制部分组成。当控制信号输入时&#xff0c;电子控制部分会根据控制器的指令调节直流电机输出的旋转角度和速度&#xff0c;由机械部分转化为控制面的位移…

gozero项目迁移与新服务器环境配置,包含服务器安装包括go版本,Nginx,项目配置包括Mysql,redis,rabbit,域名

迁移 **GoZero** 项目到新服务器并配置相关环境涉及多个步骤。以下是一个系统化的指南&#xff0c;涵盖服务器环境安装、数据库和缓存配置、项目部署以及域名绑定。 ### 步骤概述 1. **服务器环境配置** - 安装 Go 语言环境 - 安装 Nginx - 安装 MySQL 和 Redis -…

华为交换机配置基础

文章目录 华为设备配置视图ensp入门拓扑搭建和IP地址配置IP地址和网关静态路由配置动态路由RIP路由配置 OSPF配置单臂路由【实现不同vlan之间互联互通】console 密码模式AAA认证的原理和配置telnet 远程登录 华为设备配置视图 华为设备登录配置 <AR> system-view //进入…

善于运用指针--通过指针引用数组

一个数组包含若干个元素&#xff0c;每个元素在内存中占用储存单元&#xff0c;它们都有相应的地址&#xff0c;指针变量能指向变量&#xff0c;也可以指向地址。所谓数组元素的地址&#xff0c;也就是数组元素的指针。 文章目录 前言一、在引用数组元素时指针的运算二、通过指…