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

32.C++二叉树进阶1(二叉搜索树)

⭐上篇文章:31.C++多态4(静态多态,动态多态,虚函数表的存储位置)-CSDN博客

⭐本篇代码:c++学习/18.二叉树进阶-二叉搜索树 · 橘子真甜/c++-learning-of-yzc - 码云 - 开源中国 (gitee.com)

⭐标⭐是比较重要的部分

目录

一. 二叉搜索树的概念

二. 二叉搜索树的插入 

 三. 二叉搜索树的查找

 四. 二叉树的删除

4.1 删除节点右子树为空

4.2 删除节点左子树为空 

4.3 左右孩子均不为空

4.4 删除节点代码 

五. 二叉搜索树的遍历 

六.代码与测试


一. 二叉搜索树的概念

        二叉搜索树也称二叉排序树,它有可能是一颗空树。二叉搜索树性质如下:

1 若它有左子树,那么它的左子树所有节点的值小于根节点

2 如它有右子树,那么它的右子树所有节点的值小于根节点

3 它的左右子树也是二叉搜索树

二叉树的代码框架如下:

#pragma once
#include <iostream>
#include <vector>//二叉树节点
template<class K>
struct BSTreeNode
{K _key;BSTreeNode* _left;BSTreeNode* _right;BSTreeNode(const K& key):_key(key), _left(nullptr), _right(nullptr){};
};//二叉树
template<class K>
class BSTree
{typedef BSTreeNode<K> Node;
public:bool Insert(){}bool find(){}bool Delete){}//二叉树不允许修改数据
private:Node* _root;	//根节点
};

二. 二叉搜索树的插入 

假设我们插入的节点为key

若一棵树为空,则直接插入即可

若不为空:

        按照二叉搜索树的性质,插入该节点即可。

如果某一个节点和key值相同,则直接不插入

若某一个节点比key值大,则应该将key插入到该节点的左子树中

若某一个节点比key值小,则应该将key插入到该节点的右子树中

然后在其左右子树中进行判断,直到子树节点为空,然后插入即可

流程图如下:

插入函数的代码如下:

	bool Insert(const K& key){//根节点为空if (!root){_root = new Node(key);return true;}//不为空,根据性质插入数据Node* cur = _root;Node* parent = cur;			//最后cur为空,需要一个节点保存其父节点用于连接while (cur){if (key > cur->_key)	//比当前值大,找其右子树{parent = cur;cur = cur->_right;}else if (key < cur->_key)	//比当前树小,找其左子树{parent = cur;cur = cur->_left;}elsereturn false;	//有相同节点,插入失败}//此时cur为空,cur即为插入的数据cur = new Node(key);if (cur->_key > parent->_key){parent->_right = cur;}else{parent->_left = cur;}return true;}

 三. 二叉搜索树的查找

        二叉搜索树的查找过程和插入过程非常相似。比如在插入的过程中,如果发现值相同,返回true即可,如果为空,则说明没有这个节点,返回false

	bool find(const K& key){if (!_root)return false;Node* cur = _root;while (cur){if (key > cur->_key)cur = cur->_right;else if (key < cur->_key)cur = cur->_left;else return true;}//cur为空,没有key这个节点return false;}

 四. 二叉树的删除

        二叉树的删除比较麻烦。可以分为下面四个情况。

1 该节点无左右子节点:

2 该节点只有左子树:

3 该节点只有右子树

4 该节点有左右子树

实际情况1与情况2或者3是重合的,所以只需考虑三者情况 

4.1 删除节点右子树为空

下面这流程图我们要删除节点9

若删除节点是父亲左孩子,父亲的左指向删除节点的左孩子

若删除节点是父亲的右孩子,父亲的右指向删除节点的左孩子

如果一个节点左右都为空,也满足这种情况

4.2 删除节点左子树为空 

        与上面情况类似

若删除节点是父亲左孩子,父亲的左指向删除节点的右孩子

若删除节点是父亲的右孩子,父亲的右指向删除节点的右孩子

4.3 左右孩子均不为空

        此时需要找到一个节点来替代这个节点,在二叉搜索树中,根据其左子树节点比根节点小,右子树节点比根节点大的性质。如果一给节点左右不为空,只需找出其左子树最大,或者右子树最小来替代这个节点即可。

流程图如下:

4.4 删除节点代码 

//删除bool Erase(const K& key){//1.该节点只有一个孩子//2.该节点没有孩子//3.该节点有三个孩子Node* cur = _root;Node* parent = cur;while (cur){if (cur->_key < key){parent = cur;cur = cur->_right;}else if (cur->_key > key){parent = cur;cur = cur->_left;}else//找到了,开始删除{if (cur->_left == nullptr){//当cur为根的时候要特判if (cur == _root){_root = cur->_right;}if (cur == parent->_left){parent->_left = cur->_right;}else{parent->_right = cur->_right;}delete cur;cur = nullptr;}else if (cur->_right == nullptr){if (cur == _root){_root = cur->_left;}if (cur == parent->_left){parent->_left = cur->_left;}else{parent->_right = cur->_left;}delete cur;cur = nullptr;}else//两边都不为空{//找到左边最大,右边最小与当前值交互即可Node* rightmin = cur->_right;Node* rightminparent = cur;while (rightmin->_left){rightminparent = rightmin;rightmin = rightmin->_left;}cur->_key = rightmin->_key;//如果cur的右孩子是最小的,直接让cur指向右孩子的右孩子即可if (rightmin == cur->_right){cur->_right = rightmin->_right;}else{rightminparent->_left = rightmin->_right;}delete rightmin;rightmin = nullptr;}return true;}}return false;}

五. 二叉搜索树的遍历 

        根据二叉搜索树的性质,如果我们以中序遍历(左根右),那我们的遍历的时候先是最小的,然后依次遍历更大的。那么最终的排序顺序是有序的!

中序遍历代码如下:

	void _InOrder(const Node* root){if (!root)return;//中序遍历_InOrder(root->_left);cout << root->_key << " ";_InOrder(root->_right);}

六.代码与测试

 bstree.h

#pragma once
#include<iostream>
#include<vector>
using namespace std;template<class K>
struct BSTreeNode
{BSTreeNode* _left;BSTreeNode* _right;K _key;//构造函数BSTreeNode(const K& key):_left(nullptr), _right(nullptr), _key(key){}
};template<class K>
class BSTree
{typedef BSTreeNode<K> Node;
public://插入bool Insert(const K& key){//第一次插入if (!_root){_root = new Node(key);return  true;}Node* cur = _root;Node* parent = cur;while (cur){if (cur->_key < key){parent = cur;cur = cur->_right;}else if (cur->_key > key){parent = cur;cur = cur->_left;}else{return false;}}cur = new Node(key);if (parent->_key > key){parent->_left = cur;}else{parent->_right = cur;}return true;}//查找bool find(const K& key){if (!_root)return false;Node* cur = _root;while (cur){if (cur->_key < key){cur = cur->_right;}else if (cur->_key > key){cur = cur->_left;}else{return true;}}return false;}//删除bool Erase(const K& key){//1.该节点只有一个孩子//2.该节点没有孩子//3.该节点有三个孩子Node* cur = _root;Node* parent = cur;while (cur){if (cur->_key < key){parent = cur;cur = cur->_right;}else if (cur->_key > key){parent = cur;cur = cur->_left;}else//找到了,开始删除{if (cur->_left == nullptr){//当cur为根的时候要特判if (cur == _root){_root = cur->_right;}if (cur == parent->_left){parent->_left = cur->_right;}else{parent->_right = cur->_right;}delete cur;cur = nullptr;}else if (cur->_right == nullptr){if (cur == _root){_root = cur->_left;}if (cur == parent->_left){parent->_left = cur->_left;}else{parent->_right = cur->_left;}delete cur;cur = nullptr;}else//两边都不为空{//找到左边最大,右边最小与当前值交互即可Node* rightmin = cur->_right;Node* rightminparent = cur;while (rightmin->_left){rightminparent = rightmin;rightmin = rightmin->_left;}cur->_key = rightmin->_key;//如果cur的右孩子是最小的,直接让cur指向右孩子的右孩子即可if (rightmin == cur->_right){cur->_right = rightmin->_right;}else{rightminparent->_left = rightmin->_right;}delete rightmin;rightmin = nullptr;}return true;}}return false;}//二叉搜索树不允许修改,修改后会导致二叉树失效//中序遍历void InOrder(){_InOrder(_root);cout << endl;}private:Node* _root = nullptr;void _InOrder(const Node* root){if (!root)return;//中序遍历_InOrder(root->_left);cout << root->_key << " ";_InOrder(root->_right);}
};

test.cpp

#define _CRT_SECURE_NO_WARNINGS 1
#include"bstree.h"void test1()
{BSTree<int> tree;vector<int> arr;for (int i = 0; i < 10; i++){int t = rand() % 10000;arr.push_back(t);tree.Insert(t);}tree.InOrder();for (int i = 0; i <= 9; i++){cout << "删除" << arr[i] << "后:";tree.Erase(arr[i]);tree.InOrder();}
}int main()
{srand((unsigned int)time(0));test1();
}

可以看到,排序的顺序是有序的

相关文章:

32.C++二叉树进阶1(二叉搜索树)

⭐上篇文章&#xff1a;31.C多态4&#xff08;静态多态&#xff0c;动态多态&#xff0c;虚函数表的存储位置&#xff09;-CSDN博客 ⭐本篇代码&#xff1a;c学习/18.二叉树进阶-二叉搜索树 橘子真甜/c-learning-of-yzc - 码云 - 开源中国 (gitee.com) ⭐标⭐是比较重要的部分…...

RV1126+FFMPEG多路码流监控项目

一.项目介绍&#xff1a; 本项目采用的是易百纳RV1126开发板和CMOS摄像头&#xff0c;使用的推流框架是FFMPEG开源项目。这个项目的工作流程如下(如上图)&#xff1a;通过采集摄像头的VI模块&#xff0c;再通过硬件编码VENC模块进行H264/H265的编码压缩&#xff0c;并把压缩后的…...

doris: SQL Server

Doris JDBC Catalog 支持通过标准 JDBC 接口连接 SQL Server 数据库。本文档介绍如何配置 SQL Server 数据库连接。 使用须知​ 要连接到 SQL Server 数据库&#xff0c;您需要 SQL Server 2012 或更高版本&#xff0c;或 Azure SQL 数据库。 SQL Server 数据库的 JDBC 驱动…...

valgrind 检测多线程 bug,检测 并发 bug concurrent bug parallel bug

valgrind --toolhelgrind ./your_program 如果检测的对象是大型程序&#xff0c;可以设定仅在某些函数中开启 valgrind 的检测&#xff1a; Valgrind 提供了一些客户请求&#xff08;client requests&#xff09;&#xff0c;可以在代码中插入特定的宏来控制 Valgrind 的行为。…...

查看k8s集群的资源使用情况

查看Kubernetes&#xff08;k8s&#xff09;集群的资源使用情况有多种方法&#xff0c;以下是一些常见的方式&#xff1a; 使用kubectl命令行工具 查看节点资源使用情况 kubectl top nodes命令可以显示集群中各个节点的CPU和内存使用情况。例如&#xff1a; NAME …...

在 k8s中查看最大 CPU 和内存的极限

在 Kubernetes&#xff08;k8s&#xff09;中&#xff0c;你可以从不同层面查看最大 CPU 和内存的极限&#xff0c;下面为你详细介绍从节点和集群层面查看的方法。 查看节点的 CPU 和内存极限 节点的 CPU 和内存极限是指单个节点上可分配的最大资源量&#xff0c;可通过以下几…...

IDC权威认证!永洪科技入选 IDC「GBI图谱」,点亮生成式 BI 价值灯塔

大数据市场正在稳步前进&#xff0c;生成式AI已成为厂商服务的重点方向&#xff0c;其发展离不开数据底座建设和数据工程管理&#xff0c;反过来AI也会帮助开发运维人员、业务人员和管理层更好地使用、查询数据。IDC调研数据显示&#xff0c;在生成式AI的驱动下&#xff0c;未来…...

HarmonyOS 应用程序包结构 (编译态)

不同类型的Module编译后会生成对应的HAP、HAR、HSP等文件&#xff0c;开发态视图与编译态视图的对照关系如下&#xff1a; 从开发态到编译态&#xff0c;Module中的文件会发生如下变更&#xff1a; ets目录&#xff1a;ArkTS源码编译生成.abc文件。resources目录&#xff1a;A…...

C# 程序结构

C#的程序结构大体可以分为&#xff1a; 命名空间、类名、Main方法、标识符及关键字语句注释 C# 文件的后缀为 .cs 以下创建一个HelloWorld的类&#xff0c;可以看一下 using System; namespace HelloWorldApplication //命名空间 {class HelloWorld //类名{static void …...

LLM 学习(二 完结 Multi-Head Attention、Encoder、Decoder)

文章目录 LLM 学习&#xff08;二 完结 Multi-Head Attention、Encoder、Decoder&#xff09;Self-Attention &#xff08;自注意力机制&#xff09;结构多头注意力 EncoderAdd & Norm 层Feed Forward 层 EncoderDecoder的第一个Multi-Head AttentionMasked 操作Teacher Fo…...

GET3D:从图像中学习的高质量3D纹理形状的生成模型

【摘要】 本文提出了GET3D,这是一种新的生成模型,能够生成具有任意拓扑结构的高质量3D纹理网格,可以直接被3D渲染引擎使用并在下游应用中立即使用。现有的3D生成模型要么缺乏几何细节,要么生成的网格拓扑受限,通常不支持纹理,或者在生成过程中使用神经渲染器,使得它们在…...

JmeterHttp请求头管理出现Unsupported Media Type问题解决

JmeterHttp请求头管理出现Unsupported Media Type问题解决 大多数的app与pc端压测的时候都会出现这种情况 当我们在jemter测试当中当中遇见Unsupported Media Type&#xff0c;有一种可能就是我们请求的网页的content-Type的类型与我们测试的时候的类型不一致 解决方法 可以添…...

Python 性能优化:从入门到精通的实用指南

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

Vue23Web 基礎性拉滿的面試題(2025版)還沒更新完...

Vue2&3 基礎性1. 關於Vue2和Vue3生命週期的差別2. Vue2&3組件之間傳參不同點Vue2 傳遞與接收Vue3 傳遞與接收 (使用script setup語法糖)Vue3 傳遞與接收 (不使用script setup語法糖) 3. Vue2&3 keep-alive 組件Vue2 keep-aliveVue3 keep-alive 進階性爲什麽POST請求…...

Python基于Django的医用耗材网上申领系统【附源码、文档说明】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…...

STM32使用无源蜂鸣器

1.1 介绍&#xff1a; 有源蜂鸣器&#xff1a;内部自带振荡源&#xff0c;将正负极接上直流电压即可持续发声&#xff0c;频率固定 无源蜂鸣器&#xff1a;内部不带振荡源&#xff0c;需要控制器提供振荡脉冲才可发声&#xff0c;调整提供振荡脉冲的频率&#xff0c;可发出不同…...

9.1go结构体

Go不是完全面向对象的&#xff0c;没有类的概念&#xff0c;所以结构体应该承担了更多的责任。 结构体定义 使用 type 和 struct 关键字定义&#xff1a; type Person struct { Name string Age int } 字段可以是任意类型&#xff0c;包括其他结构体或指针。 字段名以大写…...

Ubuntu20.04本地配置IsaacLab 4.2.0的G1训练环境(一)

Ubuntu20.04本地配置IsaacLab的G1训练环境&#xff08;一&#xff09; 配置Omniverse环境配置IsaacSim配置IsaacLab 写在前面&#xff0c;如果Ubuntu剩余空间低于60G&#xff0c;则空间不足&#xff0c;除非你不需要资产包。但资产包中却包含了G1模型、Go2模型等机器人模型和代…...

全星FMEA软件:汽车电子行业研发管理高效之选

全星FMEA软件&#xff1a;汽车电子行业研发管理高效之选 在汽车电子行业&#xff0c;FMEA&#xff08;失效模式与影响分析&#xff09;是确保产品质量和安全的关键工具。然而&#xff0c;传统的FMEA分析过程往往繁琐复杂&#xff0c;耗费大量时间和精力。 全星FMEA软件应运而生…...

AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台

AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型&#xff08;LLM&#xff09;应用开发平台 目录 AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型&#xff08;LLM&#xff09;应用开发平台 一、简单介绍 二、Docker 下载安…...

OpenCV计算摄影学(18)平滑图像中的纹理区域同时保留边缘信息函数textureFlattening()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::textureFlattening 是 OpenCV 中用于图像处理的一个函数&#xff0c;旨在平滑图像中的纹理区域&#xff0c;同时保留边缘信息。该技术特别适…...

RLock类详细介绍、应用场景和示例代码

概述 org.redisson.api.RLock 是 Redisson 提供的 分布式可重入锁&#xff08;类似 ReentrantLock&#xff09;&#xff0c;基于 Redis 实现&#xff0c;常用于 分布式环境 下的 并发控制。 1. RLock 详解 &#x1f539; 特点 基于 Redis 实现&#xff0c;支持 集群环境。可…...

【HeadFirst系列之HeadFirst设计模式】第16天之生成器模式(Builder Pattern):让对象构建更优雅!

&#x1f680; 生成器模式&#xff08;Builder Pattern&#xff09;&#xff1a;让对象构建更优雅&#xff01; “遇到复杂对象构建&#xff1f;试试生成器模式&#xff01;” 在日常开发中&#xff0c;我们经常会遇到 创建对象属性过多、构造方法过长、可选参数混乱 的问题。这…...

Browser Use+DeepSeek的使用教程

browser-use webui 主要功能 提供了全新的网页界面&#xff0c;简单好用&#xff0c;方便操作。 支持更多大语言模型&#xff0c;比如 Gemini、OpenAI、Azure 等&#xff0c;还有最近爆火的国产大模型 DeepSeek&#xff0c;未来还会加更多。 支持用自己的浏览器&#xff0c;不用…...

“此电脑”中删除WPS云盘方法(百度网盘通用)

&#x1f4e3;此方法适用于卸载WPS云盘后&#xff0c;WPS云盘图标依然在此电脑中显示的问题。 原理&#xff1a;通过注册来进行删除 步骤&#xff1a; WIN键R,打开运行窗口&#xff0c;输入regedit命令&#xff0c;来打开【注册表编辑器】&#xff1b; 从左侧&#xff0c;依…...

1. 树莓派上配置机器人环境(具身智能机器人套件)

1. 安装树莓派系统 镜像下载地址&#xff08;windows/Mac/Ubuntu)&#xff0c;安装Pi5. 2. 环境配置&#xff08;登录Pi系统&#xff09; 2.1 启用 SSH From the Preferences menu, launch Raspberry Pi Configuration. Navigate to the Interfaces tab. Select Enable…...

正则表达式(2)匹配规则

正则表达式的匹配规则定义了如何识别字符串中的特定模式。这些规则包括字符类匹配、元字符匹配、数量词、字符转义和分组。 字符类匹配 字符类匹配允许你指定一个字符集合&#xff0c;并匹配该集合中的任意单个字符。这是通过方括号 [] 来实现的。 简单字符类&#xff1a;[abc…...

Golang实践录:go发布版本信息收集

go发布版本信息收集。 背景 本文从官方、网络资料收罗有关go的发布历史概况。主要目的是能快速了解golang不同版本的变更。鉴于官方资料为英文&#xff0c;为方便阅读&#xff0c;使用工具翻译成中文&#xff0c;重要特性参考其它资料补充/修改。由于发布版本内容较多&#xf…...

go:windows环境下安装Go语言

1.下载 打开Go语言中文网下载页面&#xff1a; https://studygolang.com/dl 按照对应平台选择下载&#xff1a; https://studygolang.com/dl/golang/go1.19.2.windows-amd64.msi。 2.安装 双击下载好的文件 记下安装路径&#xff0c;删除末尾的反斜杠&#xff1a; C:\Program…...

遵义市招生管理信息系统的开发与实现

近年来&#xff0c;随着信息技术的发展&#xff0c;各类管理系统在教育领域得到广泛应用。本文将介绍如何开发一个基于Web的招生管理信息系统&#xff0c;以提高遵义市招生工作的效率和透明度。 系统架构设计 本系统采用典型的三层架构&#xff0c;包括表示层、业务逻辑层和数…...

Java 大视界 -- 区块链赋能 Java 大数据:数据可信与价值流转(84)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

Pytest自动化框架

目录 Pytest简单介绍 第一章&#xff1a;Pytest console命令 1.pytest -v 参数 -h 参数 其他一些参数&#xff1a;仅供参考 第二章. mark标记 pytest.mark.skip pytest.mark.skipif pytest.mark.xfail ​编辑 pytest.mark.patametrize 单个参数 多个参数 直接…...

算法之 前缀和

文章目录 前缀和基础3427.变长子数组求和 前缀和与哈希表1524.和为奇数的子数组数目 距离和1685.有序数组中绝对值之和 前缀异或和1177.构建回文串检测 其他一维前缀和1310.子数组异或查询 二维前缀和1314.矩阵区域和 前缀和&#xff0c;就是定义pre[i] 为nums的前i个元素的和值…...

【Windows下Gitbook快速入门使用】

Windows下Gitbook快速入门使用 1 工具安装1.1 Node.js下载安装1.1 环境变量1.2 npm配置1.3 安装gitbook 2 gitbook使用2.1 gitbook 无法执行2.2 gitbook常用命令 Gitbook是一个软件&#xff0c;使用Git和Markdown来编排书本&#xff1b; GitBook helps you pushlish beautiful …...

python网络爬虫开发实战之基本库使用

目录 第二章 基本库的使用 2.1 urllib的使用 1 发送请求 2 处理异常 3 解析链接 4 分析Robots协议 2.2 requests的使用 1 准备工作 2 实例引入 3 GET请求 4 POST请求 5 响应 6 高级用法 2.3 正则表达式 1 实例引入 2 match 3 search 4 findall 5 sub 6 com…...

【hello git】git rebase、git merge、git stash、git cherry-pick

目录 一、git merge&#xff1a;保留了原有分支的提交结构 二、git rebase&#xff1a;提交分支更加整洁 三、git stash 四、git cherry-pick 共同点&#xff1a;将 一个分支的提交 合并到 到另一个上分支上去 一、git merge&#xff1a;保留了原有分支的提交结构 现有一个模型…...

deepseek、腾讯元宝deepseek R1、百度deepseekR1关系

分析与结论 区别与联系 技术基础与定制方向&#xff1a; DeepSeek官网R1版本&#xff1a;作为基础版本&#xff0c;通常保留通用性设计&#xff0c;适用于广泛的AI应用场景&#xff08;如自然语言处理、数据分析等&#xff09;。其优势在于技术原生性和官方直接支持。腾讯元宝…...

DeepSeek + 沉浸式翻译 打造智能翻译助手

本文详细介绍如何使用 DeepSeek API 沉浸式翻译插件打造个性化翻译助手。 一、DeepSeek API 配置 基础配置 API 基础地址&#xff1a;https://api.deepseek.com需要申请 API Key支持与 OpenAI SDK 兼容的调用方式 可用模型 deepseek-chat&#xff1a;已升级为 DeepSeek-V3&am…...

iOS 聊天 IM 消息收发管理工具

iOS 聊天 IM 消息收发管理工具 连续疯狂加班告一段落&#xff0c;趁着离职前夕的空闲时间&#xff0c;整理一下重构相关的文档。之前写过两篇文章 iOS 客户端 IM 以及列表 UI 框架 、iOS 客户端 IM 消息卡片插件化&#xff0c;突然发现时间过的真的很快&#xff0c;这都已经是…...

从零开始学习Slam--数学概念

正交矩阵 矩阵的转置等于它的逆矩阵&#xff0c;这样的矩阵称之为正交矩阵 即&#xff1a; Q T Q I Q^T Q I QTQI&#xff0c; 这样的矩阵列向量都是单位向量且两两正交。 旋转矩阵属于特殊的正交群&#xff0c;即SO(n)&#xff0c;这里n通常是3&#xff0c;所以SO(3)就是…...

3.使用ElementUI搭建侧边栏及顶部栏

1. 安装ElementUI ElementUI是基于 Vue 2.0 的桌面端组件库。使用之前&#xff0c;需要在项目文件夹中安装ElementUI&#xff0c;在终端中输入以下命令&#xff0c;进行安装。 npm i element-ui -S并在main.js中引入ElementUI 2. 使用elmentUI组件进行页面布局 2.1 清空原…...

pandas-基础(数据结构及文件访问)

1 Pandas的数据结构 1.1 Series 特点&#xff1a;一维的数据型对象&#xff0c;包含一个值序列和数据标签(即索引&#xff09; 创建Series&#xff1a; pandas.Series(dataNone, indexNone, dtypeNone, nameNone, copyFalse, fastpathFalse) 参数说明&#xff1a; data&a…...

windows下使用msys2编译ffmpeg

三种方法&#xff1a; 1、在msys2中使用gcc编译 2、在msys2中使用visual studio编译&#xff08;有环境变量&#xff09; 3、在msys2中使用visual studio编译&#xff08;无环境变量&#xff09; 我的环境&#xff1a; 1、msys2-x86_64-20250221 2、vs2015 3、ffmpeg-7.1…...

Linux驱动开发(1.基础创建)

序言&#xff1a;从高层逻辑到底层硬件的回归 在当今的软件开发中&#xff0c;我们习惯于用高级语言构建抽象层——通过框架、库和云服务快速实现功能。这种“软逻辑”的便利性让开发效率倍增&#xff0c;却也逐渐模糊了我们对计算机本质的认知&#xff1a;一切代码终将落地为…...

长短期记忆网络(LSTM)学习指南

长短期记忆网络&#xff08;LSTM&#xff09;学习指南 1. 定义和背景 长短期记忆网络&#xff08;Long Short-Term Memory, LSTM&#xff09;是一种递归神经网络&#xff08;RNN&#xff09;的变体&#xff0c;旨在解决传统RNN在处理长期依赖关系时遇到的梯度消失或爆炸问题。…...

蓝耘智算平台助力阿里万相2.1:文生图创作攻略

声明&#xff1a;非广告&#xff0c;为用户体验文章 目录 引言 一、认识蓝耘智算平台与阿里万相 2.1 &#xff08;一&#xff09;蓝耘智算平台概述 &#xff08;二&#xff09;阿里万相 2.1 文生图技术解析 二、蓝耘智算平台注册与环境准备 &#xff08;一&#xff09;注…...

HarmonyOS ArkTS声明式UI开发实战教程

引言&#xff1a;为何选择ArkTS&#xff1f; 在HarmonyOS生态快速发展的当下&#xff0c;ArkTS作为新一代声明式UI开发框架&#xff0c;正在引发移动应用开发范式的变革。笔者曾在多个跨平台框架开发中经历过"命令式编程之痛"&#xff0c;直到接触ArkTS后才发现&…...

电脑总显示串口正在被占用处理方法

1.现象 在嵌入式开发过程中&#xff0c;有很多情况下要使用串口调试&#xff0c;其中485/422/232转usb串口是非常常见的做法。 根据协议&#xff0c;接口芯片不同&#xff0c;需要安装对应的驱动程序&#xff0c;比如ch340&#xff0c;cp2102&#xff0c;CDM212364等驱动。可…...

linux 安装nvidia 驱动所有发行版通用

之前有写过Ubuntu安装驱动的手册&#xff1a; https://blog.csdn.net/qq_50247813/article/details/146062785 到官网寻找合适的驱动&#xff1a; https://www.nvidia.cn/drivers/lookup 直接选择 linux 64-bit 适用于所有x86构架的linux&#xff0c;arm需要选择arm架构。 这次…...

PHP之数组

在你有别的编程语言的基础下&#xff0c;你想学习PHP&#xff0c;可能要了解的一些关于数组的信息。 PHP中的数组不用指定数据类型&#xff0c;同时索引不一定是数字。 与其说是数组&#xff0c;其实更像map。 创建和输出 $arr array(1, 2, 3); $arr1 [1, 2, 3]; var_dump(…...