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

数据结构二叉树-C语言

数据结构二叉树-C语言

  • 1.树
    • 1.1树的概念与结构
    • 1.2树的相关术语
    • 1.3树的表示
    • 1.4树形结构实际运用场景
  • 2.二叉树
    • 2.1概念与结构
    • 2.2特殊的二叉树
      • 2.2.1满二叉树
      • 2.2.2完全二叉树
    • 2.3二叉树存储结构
      • 2.3.1顺序结构
      • 2.3.2链式结构
  • 3.实现顺序结构的二叉树
  • 4.实现链式结构二叉树
  • 4.1前中后序遍历
    • 4.1.1遍历规则
    • 4.1.2代码实现
    • 4.2结点个数以及高度等

1.树

1.1树的概念与结构

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一颗倒挂的树,也就是说它是根朝上,而叶朝下的。
•有一个特殊的结点,称为根结点,根结点没有前驱结点。
•除根结点外,其余结点被分为M(M>0)个互不相交的集合T1、T2、…Tm,其中每一个集合Ti(1<=i<=m)又是一颗结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继。因此,树是递归定义的。

如图1所示:
图1

树形结构中,子树之间不能有交集,否则就不是树形结构

非树形结构:
在这里插入图片描述
•子树是不相交的(如果存在相交就是图了)
•除了根结点外,每个结点有且仅有一个父结点
•一颗N个结点的树有N-1条边

1.2树的相关术语

根据图1:

夫结点/双亲结点:若一个结点含有子结点,则这个结点称为其子结点的夫结点;如图1A是B的夫结点。

子结点/孩子结点:一个结点含有子树的根节点称为该结点的子结点;如图1B是A的孩子结点。

结点的度:一个结点有几个孩子,他的度就是多少;比如A的度为2,D的度为1.

树的度:一棵树中,最大的结点的度称为树的度;如图1,最大的度为2

叶子结点/终端结点:度为0的结点称为叶节点;如图1,H、E、F、G为叶子结点。

分支结点/非终端结点:度不为0的结点;如图1中的D、B、C为分支结点。

兄弟结点:具有相同父结点的结点互称为兄弟结点(亲兄弟);如图1中的B和C是兄弟结点。

结点的层次:从根开始定义起,根为第一层,根的子结点为第二层,依次类推。

树的高度或深度:树中结点的最大层次;如图1:树的高度为4.

结点的祖先:从根到该结点所经分支上的所有结点;如图1:A是所有结点的祖先。

路径:一条从树中任意结点出发,沿父节点-子结点连接,达到任意结点的序列;比如A到H的路径为A-B-D-H,从A到F的路径为A-C-F。

子孙:以某结点为根的子树中任一结点的子孙。如图1:所有结点都是A的子孙。

森林:由m(m>0)课互不相交的树称为森林。

1.3树的表示

既要保存值域,也要保存结点和结点之间的关系。
使用孩子兄弟表示法。

1.4树形结构实际运用场景

文件系统是计算机存储和管理文件的一种方式,它利用树形结构来组织和管理文件和文件夹。在文件系统中,树结构被广泛应用,它通过夫结点和子结点之间的关系来表示不同层级的文件和文件夹之间的关联。

2.二叉树

2.1概念与结构

在树结构中,我们最常用的就是二叉树,一颗二叉树是结点的一个有限集合,该集合由一个根结点加上两课别称为左子树和右子树的二叉树组成或者为空。
在这里插入图片描述
从图上可以看出二叉树具有以下特点:
1.二叉树不存在度大于2的结点
2.二叉树的子树有左右之分,依序不能颠倒,因此二叉树是有序树。
注意:对于任意的二叉树都是由以下几种情况复合而成的。
在这里插入图片描述

2.2特殊的二叉树

2.2.1满二叉树

一个二叉树,如果每一个层的结点树都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为k,且结点总数是2^k-1,则它就是满二叉树。
在这里插入图片描述

2.2.2完全二叉树

完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。要注意的是满二叉树是一种特殊的完全二叉树。
在这里插入图片描述
二叉树性质:

根据满二叉树的特点可知:
1)若规定根结点的层数为1,则一颗非空二叉树的第i层上最多有2^(i-1)
2)若规定根结点的层数为1,则深度为h的二叉树的最大结点数是2^h-1.
3)若规定根结点的层数为1,具有n个结点的满二叉树的深度h=log2(n+1)(log以2为底,n+1为对数)

2.3二叉树存储结构

二叉树一般可以使用两种结构存储,一种顺序结构,一种链式结构。

2.3.1顺序结构

顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费,完全二叉树更适合使用顺序结构存储。
在这里插入图片描述
在这里插入图片描述
现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。

2.3.2链式结构

二叉树的链式存储结构是值,用链表来表示一颗二叉树,即用链来指示元素的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。链式结构又分为二叉链和三叉链。
在这里插入图片描述
在这里插入图片描述

3.实现顺序结构的二叉树

一般使用顺序结构的数组来存储数据,堆是一种特殊的二叉树,具有二叉树的特性的同时,还具备其他的特性。(通过堆来实现)下一期内容写堆

4.实现链式结构二叉树

用链表来表示一颗二叉树,即 用链来指示元素的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出结点左孩子和右孩子所在的链结点的存储地址,其结构如下:

typedef char BTDataType;
typedef struct BinaryTreeNode
{BTDataType _data;//当前结点的数据域struct BinaryTreeNode* _left;//指向当前结点左孩子struct BinaryTreeNode* _right;//指向当前结点的右孩子
}BTNode;

二叉树的创建方式比较复杂,为了更好的步入到二叉树内容中,手动创造一课链式二叉树

//手动构造树
BTNode* CreateTree()
{BTNode* nodeA = buyNode('A');BTNode* nodeB = buyNode('B');BTNode* nodeC = buyNode('C');BTNode* nodeD = buyNode('D');BTNode* nodeE = buyNode('E');BTNode* nodeF = buyNode('F');nodeA->_left = nodeB;nodeA->_right = nodeC;nodeB->_left = nodeD;nodeC->_left = nodeE;nodeC->_right = nodeF;return nodeA;
}

二叉树分为空树和非空二叉树由根结点、根结点的左孩子、根结点的右孩子组成的。
在这里插入图片描述
根结点的左子树和右子树分别又是由子树结点、子树结点的左孩子、子树结点的右孩子组成的,因此二叉树定义是递归式的,后序链式二叉树的操作中基本都是按照该概念实现的。

4.1前中后序遍历

二叉树的操作离不开树的遍历,我们先来看看二叉树的遍历有哪些方式
在这里插入图片描述

4.1.1遍历规则

按照规则,二叉树的遍历有:前序/中序/后序的递归结构遍历:
1)前序遍历:访问根结点的操作发生在遍历其左右子树之前

访问顺序为:根结点、左子树、右子树

2)中序遍历:访问根结点的操作发生在遍历其左右子树之中(间)

访问顺序为:左子树、根结点、右子树

3)后序遍历:访问根结点的操作发生在遍历其左右子树之后

访问顺序为:左子树、右子树、根结点

4.1.2代码实现

//先序遍历
void BinaryTreePrevOrder(BTNode* root)
{if (root == NULL){printf("NULL");return;}printf("%c ", root->_data);BinaryTreePrevOrder(root->_left);BinaryTreePrevOrder(root->_right);
}//中序遍历
void BinaryTreeInOrder(BTNode* root)
{if (root == NULL){printf("NULL");return;}BinaryTreeInOrder(root->_left);printf("%c ", root->_data);BinaryTreeInOrder(root->_right);
}//后序遍历
void BinaryTreePostOrder(BTNode* root)
{if (root == NULL){printf("NULL");return;}BinaryTreePostOrder(root->_left);BinaryTreePostOrder(root->_right);printf("%c ", root->_data);
}

图解遍历:
以前序遍历为例:
在这里插入图片描述

4.2结点个数以及高度等

头文件:

// 二叉树销毁
void BinaryTreeDestory(BTNode** root);
// 二叉树节点个数
int BinaryTreeSize(BTNode* root);
// 二叉树叶子节点个数
int BinaryTreeLeafSize(BTNode* root);
// 二叉树第k层节点个数
int BinaryTreeLevelKSize(BTNode* root, int k);
// 二叉树查找值为x的节点
BTNode* BinaryTreeFind(BTNode* root, BTDataType x);
// 二叉树前序遍历 
void BinaryTreePrevOrder(BTNode* root);
// 二叉树中序遍历
void BinaryTreeInOrder(BTNode* root);
// 二叉树后序遍历
void BinaryTreePostOrder(BTNode* root);

.c文件

//先序遍历
void BinaryTreePrevOrder(BTNode* root)
{if (root == NULL){printf("NULL");return;}printf("%c ", root->_data);BinaryTreePrevOrder(root->_left);BinaryTreePrevOrder(root->_right);
}

先序遍历遵循根左右的原则,使用递归的方法,先将根结点打印出来,在访问结点的左孩子,直到访问到为空,在回到结点,访问结点的右孩子。

//中序遍历
void BinaryTreeInOrder(BTNode* root)
{if (root == NULL){printf("NULL");return;}BinaryTreeInOrder(root->_left);printf("%c ", root->_data);BinaryTreeInOrder(root->_right);
}

中序遍历遵循左根右的原则,在进行递归的方式进行遍历左孩子,并将根结点打印访问,再遍历结点的右孩子。

//后序遍历
void BinaryTreePostOrder(BTNode* root)
{if (root == NULL){printf("NULL");return;}BinaryTreePostOrder(root->_left);BinaryTreePostOrder(root->_right);printf("%c ", root->_data);
}

如上规律。

// 二叉树节点个数
int BinaryTreeSize(BTNode* root)
{if (root == NULL){return 0;//return直接跳出,return 0是返回的是0.}return 1 + BinaryTreeSize(root->_left) + BinaryTreeSize(root->_right);
}

二叉树结点的个数等=根结点+左孩子的个数+右孩子的个数
通过递归访问将每个结点的左孩子和右孩子加起来,最后就能算出二叉树节点的个数。

// 二叉树叶子节点个数
int BinaryTreeLeafSize(BTNode* root)
{if (root == NULL){return 0;}if (root->_left == NULL && root->_right == NULL){return 1;//左节点和右节点都必须满足为空的情况下,直接返回1,说明二叉树中只有根结点,没有其他子结点。}return BinaryTreeLeafSize(root->_left) + BinaryTreeLeafSize(root->_right);
}

二叉树中的叶子结点=左孩子的叶子节点+右孩子的叶子结点。

// 二叉树第k层节点个数
int BinaryTreeLevelKSize(BTNode* root, int k)//当k等于0的时候就不会进函数了。
{if (root == NULL){return 0;}if (k == 1){return 1;//如果k=1的时候,就只有根结点,第一层也就只有一个结点。}return BinaryTreeLevelKSize(root->_left, k - 1) + BinaryTreeLevelKSize(root->_right, k - 1);
}

给该函数传入两个参数,一个是根结点,一个是第k层,从根结点开始向下遍历,每遍历一次k就-1,直到k为0时,就不再进函数,直接返回。

// 二叉树查找值为x的节点
BTNode* BinaryTreeFind(BTNode* root, BTDataType x)
{if (root == NULL){return NULL;}if (root->_data = x){return root;}BTNode* leftFind = BinaryTreeFind(root->_left, x);if (leftFind){return root;}BTNode* rightFind = BinaryTreeFind(root->_right, x);if (rightFind){return rightFind;}return NULL;//如果到这里了,就是没找到。
}
// 二叉树销毁
void BinaryTreeDestory(BTNode** root)//因为需要改变原本的值,所以需要传二级指针
{if (*root == NULL){return;}BinaryTreeDestory(&((*root)->_left));BinaryTreeDestory(&((*root)->_right));free(*root);*root == NULL;
}

相关文章:

数据结构二叉树-C语言

数据结构二叉树-C语言 1.树1.1树的概念与结构1.2树的相关术语1.3树的表示1.4树形结构实际运用场景 2.二叉树2.1概念与结构2.2特殊的二叉树2.2.1满二叉树2.2.2完全二叉树 2.3二叉树存储结构2.3.1顺序结构2.3.2链式结构 3.实现顺序结构的二叉树4.实现链式结构二叉树4.1前中后序遍…...

字节小米等后端岗位C++面试题

C 基础 引用和指针之间的区别&#xff1f;堆栈和堆中的内存分配有何区别&#xff1f;存在哪些类型的智能指针&#xff1f;unique_ptr 是如何实现的&#xff1f;我们如何强制在 unique_ptr 中仅存在一个对象所有者&#xff1f;shared_ptr 如何工作&#xff1f;对象之间如何同步…...

IOS HTTPS代理抓包工具使用教程

打开抓包软件 在设备列表中选择要抓包的 设备&#xff0c;然后选择功能区域中的 HTTPS代理抓包。根据弹出的提示按照配置文件和设置手机代理。如果是本机则会自动配置&#xff0c;只需要按照提醒操作即可。 iOS 抓包准备 通过 USB 将 iOS 设备连接到电脑&#xff0c;设备需解…...

renben-openstack-使用操作

管理员操作 (1)上传一个qcow2格式的centos7镜像 (2)管理员------>云主机类型------>创建云主机类型 名称&#xff1a;Centos7 VCPU数量&#xff1a;1 内存&#xff1a; 1024 根磁盘&#xff1a; 10G 其他的默认 点击创建云主机类型即可 界面会显示如下 创建公网络 (1)创建…...

HOW - Form 表单确认校验两种模式(以 Modal 场景为例)

目录 一、背景二、具体1. 模式一&#xff1a;点击确认进行校验提示2. 模式二&#xff1a;确认按钮依赖于表单内容实现说明 一、背景 基于react、antd form分别实现如下两种模式&#xff1a; 1、一个 Modal&#xff0c;点击确认进行校验提示2、一个 Modal&#xff0c;确认按钮…...

MATLAB算法实战应用案例精讲-【数模应用】图像边缘检测(附MATLAB和python代码实现)(二)

目录 前言 算法原理 相关概念 二值图像、灰度图像、彩色图像 邻接性、连通性 图像滤波 频率 滤波器 边缘检测算子:Sobel算子、Scharr算子、Laplacian算子、Canny算子 梯度计算 + 顶帽 + 黑帽 + 拉普拉斯金字塔 相位一致性(Phase Congruency,PC) 几种常见的算法…...

高考日语听力中常考2大类关键词

高考日语听力中,有些关键词的出现频率很高,同学们掌握这些关键词的读音和意思,可以提高听力答题的正确率,如时间类、地点类、天气类关键词……本文档为大家整理了干货,高考日语听力常考关键词,帮助同学们区分和积累常用词汇,记得要持续关注哦! 时间类关键词 1.星期 ∙…...

windows和linux的抓包方式

1.实验准备&#xff1a; 一台windows主机&#xff0c;一台linux主机 wireshark使用&#xff1a; 打开wireshark&#xff0c;这些有波动的就代表可以有流量经过该网卡&#xff0c;选择一张有流量经过的网卡 可以看到很多的流量&#xff0c;然后可以使用过滤器来过滤想要的流量…...

工业 4G 路由器赋能远程医疗,守护生命线

在医疗领域&#xff0c;尤其是偏远地区的医疗救治场景中&#xff0c;工业 4G 路由器正发挥着无可替代的关键作用&#xff0c;宛如一条坚韧的 “生命线”&#xff0c;为守护患者健康持续赋能。 偏远地区医疗资源相对匮乏&#xff0c;常常面临着专业医生短缺、诊疗设备有限等困境…...

《太阳之子》Build16524106官方中文学习版

《太阳之子》官方中文版https://pan.xunlei.com/s/VODabFuJ5gA7rCUACMulT5YGA1?pwdc47e# 集战术狙击、解谜与轻度潜行要素于一身&#xff0c;呈现独一无二的第三人称射击游戏体验。每关你只有一发子弹&#xff0c;但你可以进行在命中时重新瞄准、绕过障碍物、加速击穿护甲等操…...

shell-条件判断

目录 一、条件判断 1.按照文件类型进行判断 2.按照文件权限进行判断 3.两个文件之间进行比较 4.两个整数之间进行比较 5.字符串的判断 6.多重条件判断 二、if条件判断 1.单分支if条件语句 2.双分支if条件语句 &#xff08;1&#xff09;判断某文件是否存在 &#x…...

【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法,以及自动化实时数据采集

【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法&#xff0c;以及自动化实时数据采集 mmWave Studio提供的功能完全够用了 不用去纠结用DCA1000低延迟、无GUI传数据 速度最快又保证算力无非就是就是Linux板自己写驱动做串口和UDP 做雷达产品应用也不会采用DCA1000的…...

20250110_ PyTorch中的张量操作

文章目录 前言1、torch.cat 函数2、索引、维度扩展和张量的广播3、切片操作3.1、 encoded_first_node3.2、probs 4、长难代码分析4.1、selected4.1.1、multinomial(1)工作原理&#xff1a; 总结 前言 1、torch.cat 函数 torch.cat 函数将两个张量拼接起来&#xff0c;具体地是…...

【ROS2】☆ launch之Python

☆重点 ROS1和ROS2其中一个很大区别之一就是launch的编写方式。在ROS1中采用xml格式编写launch&#xff0c;而ROS2保留了XML 格式launch&#xff0c;还另外引入了Python和YAML 编写方式。选择哪种编写取决于每位开发人员的爱好&#xff0c;但是ROS2官方推荐使用Python方式编写…...

unity rb.velocity和transform.position

rb.velocity和transform.position是用来控制物体位置的两种方式&#xff0c;前者通常用来控制人物的移动&#xff0c;它们的主要区别和适用场景如下 一&#xff0c;rb.velocity&#xff08;控制刚体的速度&#xff09; 它可以直接控制物体的速度&#xff0c;而不是物体的位置…...

景芯SOC设计实战

终身辅导、一对一辅导&#xff0c;手把手教您完成SoC全流程设计&#xff0c;从入门到进阶&#xff0c;带您掌握SoC芯片架构、算法、设计、验证、DFT、后端及低功耗全流程&#xff01;直播视频不定期升级&#xff01;让您快速超越同龄人&#xff01; 景芯团队主打文档服务器实战…...

【WRF运行报错】总结WRF运行时报错及解决方案(持续更新)

目录 ./real.exe错误1:ERROR while reading namelist physics./wrf.exe错误1:FATAL CALLED FROM FILE: <stdin> LINE: 2419 Warning: too many input landuse types参考./real.exe 错误1:ERROR while reading namelist physics 执行./real.exe时,报错如下: taski…...

Mysql快速列出来所有列信息

文章目录 需求描述实现思路1、如何查表信息2、如何取字段描述信息3、如何将列信息一行展示4、拼接最终结果 需求描述 如何将MySQL数据库中指定表【tb_order】的所有字段都展示出来&#xff0c;以备注中的中文名为列名。 实现思路 最终展示效果&#xff0c;即拼接出可执行执行…...

spring boot发送邮箱,java实现邮箱发送(邮件带附件)3中方式【保姆级教程一,代码直接用】

文章目录 Java发送邮箱的方式1. 基于 Javax.mail 实现关于附件上传的方法 2. 基于 org.apache.commons.mail 实现常见报错 3. 基于 spring-boot-starter-mail 实现&#xff08;推荐&#xff09; 实际开发时需要实现邮件发送&#xff0c;本文章实现如何从零实现邮件发送。也就是…...

数据集-目标检测系列- 电话 测数据集 call_phone >> DataBall

数据集-目标检测系列- 电话 测数据集 call DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” 贵在坚持&#xff01; …...

Zstandard压缩算法

简介 Zstandard(缩写为zstd)是一种开源的无损数据压缩算法,主要设计目标是提供高比率的压缩和快速的解压缩速度。它由Yann Collet开发,并于2015年首次发布。 特点 高比率的压缩(通常比gzip更好)。快速的解压缩速度(通常比gzip更快)。支持流式解压缩。可以选择不同的压…...

npm i 报错

nodejs中 使用npm install命令时报错 npm err! file C: \user\admin\package.json_package.json 里缺少 description 和 repository 两个n字段。-CSDN博客...

【LeetCode】力扣刷题热题100道(26-30题)附源码 轮转数组 乘积 矩阵 螺旋矩阵 旋转图像(C++)

目录 1.轮转数组 2.除自身以外数组的乘积 3.矩阵置零 4.螺旋矩阵 5.旋转图像 1.轮转数组 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 class Solution { public:void rotate(vector<int>& nums, int k) …...

EFCore HasDefaultValueSql

今天小伙伴在代码中遇到了有关 HasDefaultValue 的疑问&#xff0c;这里整理澄清下... 在使用 Entity Framework Core (EFCore) 配置实体时&#xff0c;HasDefaultValue 方法会为数据库列设置一个默认值。该默认值的行为取决于以下条件&#xff1a; 1. 配置 HasDefaultValue 的…...

【数据结构】栈

目录 1.1 什么是栈 1.2 顺序栈 1.2.1 特性 1.3 链式栈 1.3.1 特性 总结&#xff1a; 1.1 什么是栈 栈是只能在一端进行插入和删除操作的线性表(又称为堆栈)&#xff0c;进行插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。 特点&#xff1a;栈是先进后出FILO…...

C++初阶—CC++内存管理

第一章&#xff1a;C/C内存分布 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(si…...

【机器视觉】OpenCV 图像基本变换

文章目录 介绍机器视觉的核心组成部分机器视觉的关键技术和趋势 4. 图像的基本变换4.1 图像的放大与缩小4.2 图像的翻转4.3 图像的旋转4.4 仿射变换之图像平移4.5 仿射变换之获取变换矩阵4.6 透视变换 介绍 机器视觉&#xff08;Machine Vision&#xff09;是一门跨学科的领域…...

【数据库】四、数据库管理与维护

文章目录 四、数据库管理与维护1 安全性管理2 事务概述3 并发控制4 备份与恢复管理 四、数据库管理与维护 1 安全性管理 安全性管理是指保护数据库&#xff0c;以避免非法用户进行窃取数据、篡改数据、删除数据和破坏数据库结构等操作 三个级别认证&#xff1a; 服务器级别…...

徐克版射雕唤醒热血武侠魂,共赴新春侠义之约

2025年大年初一&#xff0c;由徐克执导的古装武侠电影《射雕英雄传&#xff1a;侠之大者》将在影院拉开帷幕&#xff0c;在精彩纷呈的春节档电影中&#xff0c;“大IP”“大导演”“大场面”等标签让这部电影自定档起便备受关注&#xff0c;其精良的制作和传统中国武侠风的设定…...

设计模式(观察者模式)

设计模式&#xff08;观察者模式&#xff09; 第三章 设计模式之观察者模式 观察者模式介绍 观察者模式&#xff08;Observer Design Pattern&#xff09; 也被称为发布订阅模式 。模式定义&#xff1a;在对象之间定义一个一对多的依赖&#xff0c;当一个对象状态改变的时候…...

能量函数和能量守恒

在之前的文章1中讨论了与循环坐标相对应的动量守恒定律和动量矩守恒定律&#xff0c;本文将由拉格朗日方程中导出能量函数&#xff0c;进一步讨论能量守恒定律&#xff0c;并给出耗散系统的处理方法&#xff0c;这其中用到的一个关键数学定理是欧拉定理&#xff08;描述如何将一…...

【pycharm发现找不到python打包工具,且无法下载】

发现找不到python打包工具,且无法下载 解决方法&#xff1a; 第一步&#xff1a;安装distutils&#xff0c;在CMD命令行输入&#xff1a; python -m ensurepip --default-pip第二步&#xff1a;检查和安装setuptools和wheel&#xff1a; python -m pip install --upgrade …...

使用 Maxwell 计算母线的电动势

三相短路事件的动力学 三相短路事件在电气系统中至关重要&#xff0c;因为三相之间的意外连接会导致电流大幅激增。如果管理不当&#xff0c;这些事件可能会造成损坏&#xff0c;因为它们会对电气元件&#xff08;尤其是母线&#xff09;产生极大的力和热效应。 短路时&#x…...

【Python】Python之Selenium基础教程+实战demo:提升你的测试+测试数据构造的效率!

这里写目录标题 什么是Selenium&#xff1f;Selenium基础用法详解环境搭建编写第一个Selenium脚本解析脚本常用的元素定位方法常用的WebDriver方法等待机制 Selenium高级技巧详解页面元素操作处理弹窗和警告框截图和日志记录多窗口和多标签页操作 一个实战的小demo步骤一&#…...

Ubuntu中批量重命名,rename

你可以使用下面的命令批量重命名这些文件&#xff0c;在文件名中插入 _1&#xff1a; 方式一 使用 mv 命令批量重命名 如果你已经在终端中&#xff0c;且当前目录包含这些文件&#xff0c;可以执行以下命令&#xff1a; mv ai.c ai_1.c mv ai.h ai_1.h mv ao.c ao_1.c mv a…...

LINUX 下 NODE 安装与配置

一、官网地址&#xff1a; &#xff08;中文网&#xff09;https://nodejs.cn/ &#xff08;英文网&#xff09;https://nodejs.org/en/ 二、下载安装包 2.1、下载地址&#xff1a;下载 | Node.js 中文网 https://nodejs.cn/download/ 2.2、使用 wget 命令下载到linux 服务器…...

Vue3 el-tree-v2渲染慢的问题

一、现象 使用el-tree-v2处理组织架构权限时&#xff0c;整个树的数据在8500条&#xff0c;勾选数据8200条&#xff0c;打开页面需要8~10秒&#xff0c;用户无法接受。 经调试&#xff0c;发现主要卡在树的渲染回显上&#xff08;勾选数据少时&#xff0c;很快&#xff0c;勾选…...

【redis初阶】浅谈分布式系统

目录 一、常见概念 1.1 基本概念 2.2 评价指标&#xff08;Metric&#xff09; 二、架构演进 2.1 单机架构 2.2 应用数据分离架构 2.3 应用服务集群架构 2.4 读写分离/主从分离架构 2.5 引入缓存 ⸺ 冷热分离架构 2.6 数据库分库分表 2.7 业务拆分 ⸺ 引入微服务 redis学习&…...

模式识别与机器学习 | 十一章 概率图模型基础

隐马尔科夫模型&#xff08;Hidden Markov Model,HMM&#xff09; HMM是建模序列数据的图模型 1、第一个状态节点对应一个初始状态概率分布 2、状态转移矩阵A, 3、发射矩阵概率B 4、对特定的&#xff08;x,y&#xff09;的联合概率可以表示为 α递归计算——前向算法β递归…...

Linux基本指令(1)

一、ls指令 功能&#xff1a;对于目录&#xff0c;显示这个目录下的目录名以及文件名&#xff1b;对于文件&#xff0c;显示文件名 后面可接命令行选项配合使用&#xff0c;接选项时ls与选项以及选项与选项之间要有一个空格&#xff1b; 这里先学习了两个选项&#xff1a;-l…...

逐“绿”前行 企业综合能源管控低碳转型如何推进?

引言&#xff1a; 在“双碳”战略指引下&#xff0c;中国低碳节能各项工作有序推进&#xff0c;逐步建立起碳达峰碳中和“1N”的政策体系&#xff0c;重点领域、重点行业及各地区的碳达峰实施方案相继出台。能源对于促进经济社会发展、增进人民福祉至关重要。近年来&#xff0…...

springboot和vue配置https请求

项目场景&#xff1a; 代码发布到线上使用https请求需要配置ssl证书&#xff0c;前后端都需要修改。 问题描述 如图&#xff0c;我们在调用接口时报如下错误&#xff0c;这就是未配置ssl但是用https请求产生的问题。 解决方案&#xff1a; 前端&#xff1a;在vite.config.js文…...

数据库(2)--建表 表操作

1.建表 语法&#xff1a; create table if not exists 表名( 类型名 类型 comment ‘注释内容’, ... )设置字符集编码与排序规则; create table if not exists student( name char(10) comment 姓名, id bigint comment 学号 )character set utf8mb4 collate utf8mb4_0900_a…...

泷羽sec----学会并玩转powershell【基础1-2】

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…...

2 逻辑符号

在文件和目录的判断或者其他情况中&#xff0c;可以组合使用多个条件。 逻辑与 (&&) 逻辑与运算符 && 用于在多个条件都为真时执行某个操作。 # 判断文件是否存在且可读 if [ -f "$file" ] && [ -r "$file" ]; thenecho "…...

Android基于回调的事件处理

Android 中的回调机制&#xff1a;基于回调的事件处理详解 在 Android 开发中&#xff0c;回调&#xff08;Callback&#xff09;是一种常见的事件处理机制&#xff0c;主要用于异步操作和事件通知。与传统的基于监听器的事件处理相比&#xff0c;回调机制更加灵活、通用&…...

跨界融合:人工智能与区块链如何重新定义数据安全?

引言&#xff1a;数据安全的挑战与现状 在信息化驱动的数字化时代&#xff0c;数据已成为企业和个人最重要的资产之一。然而&#xff0c;随着网络技术的逐步优化和数据量的爆发式增长&#xff0c;数据安全问题也愈变突出。 数据安全现状&#xff1a;– 数据泄露驱动相关事件驱…...

qml SpringAnimation详解

1. 概述 SpringAnimation 是 Qt Quick 中用于模拟弹簧效果的动画类。它通过模拟物体在弹簧力作用下的反应&#xff0c;产生一种振荡的动画效果&#xff0c;常用于模拟具有自然回弹、弹性和振动的动态行为。这种动画效果在 UI 中广泛应用&#xff0c;特别是在拖动、拉伸、回弹等…...

Qt 5.14.2 学习记录 —— 칠 QWidget 常用控件(2)

文章目录 1、Window Frame2、windowTitle3、windowIcon4、qrc机制5、windowOpacity 1、Window Frame 在运行Qt程序后&#xff0c;除了用户做的界面&#xff0c;最上面还有一个框&#xff0c;这就是window frame框。对于界面的元素&#xff0c;它们的原点是Qt界面的左上角或win…...

Windows service运行Django项目

系统&#xff1a;Windows Service 软件&#xff1a;nssm&#xff0c;nginx 配置Django项目 1、把Django项目的静态文件整理到staticfiles文件夹中 注&#xff1a;settings中的设置 STATIC_URL /static/ STATIC_ROOT os.path.join(BASE_DIR, staticfiles/) STATICFILES_DI…...