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

【数据结构】树与二叉树、树与森林部分习题以及算法设计例题 2

目录

  • 【数据结构】树与二叉树、树与森林部分习题以及算法设计例题
    • 一、交换二叉树每个结点的左右孩子
      • Swap 函数(先序遍历):
      • Swap 函数(中序遍历)××× 不可行:
      • Swap 函数(后序遍历):
    • 二、非递归算法求森林中有几棵树
      • 树的二叉链表(孩子-兄弟)存储表示法
    • 三、判断二叉树是否为完全二叉树
    • 四、求二叉树的最小深度 以及 二叉树树高

  1. 树与二叉树知识点文章: 【数据结构】树与二叉树(递归法先序、中序、后序、层次遍历二叉树、二叉树的建立以及求树高的方法)
  2. 二叉树遍历算法的应用: 【数据结构】树与二叉树遍历算法的应用(求叶子节点个数、求树高、复制二叉树、创建二叉树、二叉树存放表达式、交换二叉树每个结点的左右孩子)
  3. 树与森林知识点文章: 【数据结构】树与森林(树的存储结构、森林与二叉树的转化、树与森林的遍历)
  4. 树与二叉树、树与森林部分习题: 【数据结构】树与二叉树、树与森林部分习题与算法设计例题

【数据结构】树与二叉树、树与森林部分习题以及算法设计例题

一、交换二叉树每个结点的左右孩子

以上代码实现了交换二叉树每个节点的左右孩子的功能,分别使用了先序、中序和后序遍历的方式。

遍历二叉树算法的变式:

  1. Swap 函数(先序遍历):

    • 从根节点开始,先交换当前节点的左右孩子。
    • 然后递归地对左子树和右子树执行相同的操作。
  2. Swap2 函数(中序遍历):

    • 与先序遍历不同,中序遍历中需要先对左子树进行操作,然后交换当前节点的左右孩子,最后对右子树进行操作。
    • 但是这个实现方式是错误的,因为在交换左子树之后,对右子树进行操作时,右子树的结构已经发生了变化,导致结果错误。
  3. Swap3 函数(后序遍历):

    • 与先序遍历类似,但是是在遍历完左右子树之后再交换当前节点的左右孩子。
    • 这样可以保证在交换左右孩子时,左右子树的结构不会被改变。

通过上述分析,正确的交换方式是采用先序或后序遍历,中序遍历方式不适合这个场景。

Swap 函数(先序遍历):

//前序
void Swap(BiTree& T){//(先序遍历) if(T){//根节点 if(T->lchild||T->rchild){BiTree p;p= T->lchild;T->lchild = T->rchild;T->rchild = p;}Swap(T->lchild);Swap(T->rchild);}
}

Swap 函数(中序遍历)××× 不可行:

//中序的不行 
void Swap2(BiTree& T){//(中序遍历) if(T){//根节点 Swap2(T->lchild);if(T->lchild||T->rchild){BiTree p;p= T->lchild;T->lchild = T->rchild;T->rchild = p;}Swap2(T->rchild);}
}

Swap 函数(后序遍历):

//后序
void Swap3(BiTree& T){//(后序遍历) if(T){//根节点 Swap3(T->lchild);Swap3(T->rchild);if(T->lchild||T->rchild){BiTree p;p= T->lchild;T->lchild = T->rchild;T->rchild = p;}}}

综上可行的只有先序和后序这两种方法:

//交换二叉树每个结点的左右孩子
//先序
void XXSwap_LandRchild(BiTree &T){BiTree p;if(T==NULL) return;else{//先序if(!T->lchild&&!T->rchild) return;p=T->lchild;T->lchild=T->rchild;T->rchild=p;XXSwap_LandRchild(T->lchild);XXSwap_LandRchild(T->rchild);}
}
//后序
void HXSwap_LandRchild(BiTree &T){BiTree p;if(T==NULL) return;else{//后序if(!T->lchild&&!T->rchild) return;HXSwap_LandRchild(T->lchild);HXSwap_LandRchild(T->rchild);p=T->lchild;T->lchild=T->rchild;T->rchild=p;}
}

完整代码示例:

//设二叉树采用二叉链表存储,设计递归算法实现二叉树中所有结点的左右孩子交换。
#include<iostream>
using namespace std;//二叉链表
typedef struct BiTNode{char data;struct BiTNode *lchild,*rchild;
} BiTNode, *BiTree;//二叉树的建立的算法(按先序遍历序列建立)
void CreateBiTree(BiTree &T) {char ch; scanf("%c",&ch);if (ch=='#') T = NULL;else {T = (BiTNode*)malloc(sizeof(BiTNode));T->data = ch;      // 生成根结点CreateBiTree(T->lchild); // 构造左子树CreateBiTree(T->rchild); // 构造右子树}
}void XXSwap_LandRchild(BiTree &T){BiTree p;if(T==NULL) return;else{//先序if(!T->lchild&&!T->rchild) return;p=T->lchild;T->lchild=T->rchild;T->rchild=p;XXSwap_LandRchild(T->lchild);XXSwap_LandRchild(T->rchild);}
}void HXSwap_LandRchild(BiTree &T){BiTree p;if(T==NULL) return;else{//后序if(!T->lchild&&!T->rchild) return;HXSwap_LandRchild(T->lchild);HXSwap_LandRchild(T->rchild);p=T->lchild;T->lchild=T->rchild;T->rchild=p;}
}void XXPrintTree(BiTree T){if(T==NULL) return;else{cout<<T->data<<" ";XXPrintTree(T->lchild);XXPrintTree(T->rchild);}
}int main()
{BiTree T;CreateBiTree(T);XXPrintTree(T);cout<<endl;XXSwap_LandRchild(T);XXPrintTree(T);cout<<endl;HXSwap_LandRchild(T);XXPrintTree(T);cout<<endl;return 0;
}

二、非递归算法求森林中有几棵树

树的二叉链表(孩子-兄弟)存储表示法

[fc,data,nb]
在这里插入图片描述

typedef struct CSNode{int data;struct CSNode *fc, *nb;
}CSNode, *CSTree;

树中每个结点三部分:
数据域(data),长子指针域(fc),
右邻兄弟指针域(nb)

树和二叉树的转换
• 树以孩子兄弟表示法存,相当于将树转换成二叉树,但此二叉树根结点无右子树
• 好处:借助二叉树的操作实现树的操作

森林与二叉树的转换

⮚ 树采用二叉链表(孩子-兄弟)存储表示法,转换成二叉树
⮚ 森林由多棵树组成: F = ( T 1 , T 2 , … , T n ) F = ( T1, T2, …, Tn ) F=(T1,T2,,Tn); 将其每棵树转换成二叉树 B T 1 , B T 2 , … , B T n BT₁, BT₂, …, BTn BT1,BT2,,BTn;
⮚ 每棵二叉树BT的根的右子树皆为空树,从BTn开始依次将其根结点链为前一棵二叉树的根的右孩子
⮚ 将森林转换成一棵二叉树,森林的操作可借助二叉树的操作完成

森林和二叉树的转换
• 森林以孩子兄弟表示法存,相当于将森林转换成二叉树
• 好处:借助二叉树的操作实现森林的操作

因此只需要一直向右下数结点的个数就行

typedef struct CSNode{int data;struct CSNode *fc, *nb;
}CSNode, *CSTree;//非递归算法求森林中有几棵树。
int CountForestTrees(CSTree F){CSTree p=F;int num=1;while(p){p=p->nb;//右子树num++;}return num;
}

完整代码示例:

//设森林采用根节点为T的二叉链表存储,设计非递归算法求森林中有几棵树。
#include<iostream>
using namespace std;typedef struct CSNode{int data;struct CSNode *fc, *nb;
}CSNode, *CSTree;//二叉树的建立的算法(按先序遍历序列建立)
void CreateBiTree(CSTree &T) {char ch; scanf("%c",&ch);if (ch=='#') T = NULL;else {T = (CSNode*)malloc(sizeof(CSNode));T->data = ch;      // 生成根结点CreateBiTree(T->fc); // 构造左子树CreateBiTree(T->nb); // 构造右子树}
}//非递归算法求森林中有几棵树。
int CountForestTrees(CSTree F){CSTree p=F;int num=1;while(p){p=p->nb;//右子树num++;}return num;
}int main()
{CSTree T;CreateBiTree(T);cout<<"森林一共有"<<CountForestTrees(T)<<"棵树"<<endl;return 0;
}

三、判断二叉树是否为完全二叉树

判断二叉树是否为完全二叉树的函数:

//完全二叉树的性质
bool check(BiTree T){if((T->lchild && T->rchild)||(!T->lchild && !T->rchild))return true;return false;
}       //判断是否的完全二叉树
bool is_Complete_Binarytree(BiTree T){BiTree p=T;SqQueue Q;if(!T) return true;//空树也是完全二叉树InitQueue(Q);EnQueue(Q,p);while(!is_QueueEmpty(Q)){DeQueue(Q,p);if(!check(p)) return false;else{if(p->lchild) EnQueue(Q,p->lchild);if(p->rchild) EnQueue(Q,p->rchild);}}return true;
}

(带main函数)题解代码示例:

//给定一个二叉树,找出其最小深度。
//最小深度是从根节点到最近叶子节点的最短路径上的节点数量。#include<iostream>
using namespace std;//判断二叉树是否为完全二叉树//结点定义入下:
//二叉链表
typedef struct BiTNode{char data;struct BiTNode *lchild,*rchild;
} BiTNode, *BiTree;//若用到队列,请用循环队列,并请实现队列的相关操作以供调用。#define MAXQSIZE 100typedef struct {BiTree *base;int front,rear;
} SqQueue; //定义循环队列//二叉树的建立的算法(按先序遍历序列建立)
void CreateBiTree(BiTree &T) {char ch; scanf("%c",&ch);if (ch=='#') T = NULL;else {T = (BiTNode*)malloc(sizeof(BiTNode));T->data = ch;      // 生成根结点CreateBiTree(T->lchild); // 构造左子树CreateBiTree(T->rchild); // 构造右子树}
}
//队列的初始化
void InitQueue(SqQueue &Q){Q.base = (BiTree *)malloc(MAXQSIZE*sizeof(BiTree));Q.front = Q.rear = 0;//队列初始化
}//队空
bool is_QueueEmpty(SqQueue Q){if(Q.rear==Q.front) return true;return false;
}//队满
bool is_QueueMAX(SqQueue Q){if((Q.rear+1)%MAXQSIZE == Q.front) return true;return false;
}//入队
void EnQueue(SqQueue &Q,BiTree e){if(!is_QueueMAX(Q)){Q.base[Q.rear]=e;Q.rear = (Q.rear + 1) % MAXQSIZE;}else{cout<<"ERROR!!! 队列已满"<<endl;}
}
//出队
void DeQueue(SqQueue &Q,BiTree &e){if(!is_QueueEmpty(Q)){e = Q.base[Q.front];Q.front = (Q.front + 1) % MAXQSIZE;}else{cout<<"ERROR!!! 队列为空"<<endl;}
}//完全二叉树的性质
bool check(BiTree T){if((T->lchild && T->rchild)||(!T->lchild && !T->rchild))return true;return false;
}       //判断是否的完全二叉树
bool is_Complete_Binarytree(BiTree T){BiTree p=T;SqQueue Q;if(!T) return true;//空树也是完全二叉树InitQueue(Q);EnQueue(Q,p);while(!is_QueueEmpty(Q)){DeQueue(Q,p);if(!check(p)) return false;else{if(p->lchild) EnQueue(Q,p->lchild);if(p->rchild) EnQueue(Q,p->rchild);}}return true;
}//层次遍历算法 
void LevelOrderTraverse(BiTree T)
{	BiTree p = T;SqQueue Q;if(!T) return;	InitQueue(Q); EnQueue(Q,p);while (!is_QueueEmpty(Q)){	DeQueue(Q,p);printf("%c ", p->data);if(p->lchild) EnQueue(Q,p->lchild);if(p->rchild) EnQueue(Q,p->rchild);}
}int main(){BiTree T;//例如输入:ABC##DE##F### 来创建二叉树 CreateBiTree(T);LevelOrderTraverse(T);cout<<endl;if(is_Complete_Binarytree(T)){cout<<"是完全二叉树"<<endl;}else{cout<<"不是完全二叉树"<<endl;}return 0; 
} 

四、求二叉树的最小深度 以及 二叉树树高

给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

求二叉树的最小深度的函数:

//直接就是将求树高的程序进行修改,将找左右子树最大树高 改为求左右子树 最小树高
//求二叉树的最小深度
int Get_minHeigt(BiTree T){//二叉树的最小深度if(T==NULL) return 0;else{int Left_Height = Get_minHeigt(T->lchild);int Right_Height = Get_minHeigt(T->rchild);int Tree_minHeight = 1+(Left_Height < Right_Height?Left_Height:Right_Height);//取最短路径return Tree_minHeight;}}

(带main函数)题解代码示例:

//给定一个二叉树,找出其最小深度。
//最小深度是从根节点到最近叶子节点的最短路径上的节点数量。#include<iostream>
using namespace std;typedef struct TreeNode{int data;//数据域TreeNode *rchild;//右孩子指针TreeNode *lchild;//左孩子指针
}TreeNode, *BiTree;//二叉树的建立的算法(按先序遍历序列建立)
void CreateBiTree(BiTree &T) {char ch; scanf("%c",&ch);if (ch=='#') T = NULL;else {T = (TreeNode*)malloc(sizeof(TreeNode));T->data = ch;      // 生成根结点CreateBiTree(T->lchild); // 构造左子树CreateBiTree(T->rchild); // 构造右子树}
}//求树高 
int Get_Height(BiTree node){//递归 求树高 if(node==NULL) return 0;else{int Left_Height = Get_Height(node->lchild);int Right_Height = Get_Height(node->rchild);int Tree_Height = 1 + (Left_Height > Right_Height?Left_Height:Right_Height);//计算树高return Tree_Height;}}
//求二叉树的最小深度
int Get_minHeigt(BiTree T){//二叉树的最小深度if(T==NULL) return 0;else{int Left_Height = Get_minHeigt(T->lchild);int Right_Height = Get_minHeigt(T->rchild);int Tree_minHeight = 1+(Left_Height < Right_Height?Left_Height:Right_Height);//取最短路径return Tree_minHeight;}}int main(){BiTree T;//例如输入:ABC##DE##F### 来创建二叉树 CreateBiTree(T);cout<<"树高为:" ;cout<<Get_Height(T)<<endl;cout<<"根节点到叶节点的最短路径上的节点数量为:";cout<<Get_minHeigt(T)<<endl;return 0; 
} 

感谢阅读!!!

  1. 树与二叉树知识点文章: 【数据结构】树与二叉树(递归法先序、中序、后序、层次遍历二叉树、二叉树的建立以及求树高的方法)
  2. 二叉树遍历算法的应用: 【数据结构】树与二叉树遍历算法的应用(求叶子节点个数、求树高、复制二叉树、创建二叉树、二叉树存放表达式、交换二叉树每个结点的左右孩子)
  3. 树与森林知识点文章: 【数据结构】树与森林(树的存储结构、森林与二叉树的转化、树与森林的遍历)
  4. 树与二叉树、树与森林部分习题: 【数据结构】树与二叉树、树与森林部分习题与算法设计例题

相关文章:

【数据结构】树与二叉树、树与森林部分习题以及算法设计例题 2

目录 【数据结构】树与二叉树、树与森林部分习题以及算法设计例题一、交换二叉树每个结点的左右孩子Swap 函数&#xff08;先序遍历&#xff09;&#xff1a;Swap 函数&#xff08;中序遍历&#xff09; 不可行&#xff1a;Swap 函数&#xff08;后序遍历&#xff09;&#xff…...

Cesium之home键开关及相机位置设置

显隐控制 设置代码中的homeButton var TDT_IMG_C "https://{s}.tianditu.gov.cn/img_c/wmts?servicewmts&requestGetTile&version1.0.0" "&LAYERimg&tileMatrixSetc&TileMatrix{TileMatrix}&TileRow{TileRow}&TileCol{TileCol}…...

FreeRTOS_day1

1.总结keil5下载代码和编译代码需要注意的事项 下载代码前要对仿真进行设置 勾选后代码会立刻执行 勾选后会导致代码不能执行 写代码的时候要写在对应的begin和end之间&#xff0c;否则会被覆盖 2.总结STM32Cubemx的使用方法和需要注意的事项 ①打开软件&#xff0c;新建工程…...

Nginx日志格式化和追踪

背景 Nginx是一款功能强大的Web服务器&#xff0c;对于网络环境中的日志记录和配置至关重要。定制化Nginx日志格式可以帮助管理员更好地监控服务器性能、分析用户行为并做出相应优化。在本文中&#xff0c;我们将深入探讨Nginx日志格式的高级定制化策略&#xff0c;包括理解基…...

华为交换机配置telnet SSH登录步骤

这次项目中的交换机是华为 S5735-L24T4X 需要配置telnet和 SSH登录 在平时项目中发现&#xff0c;华为不同型号&#xff0c;不同版本的配置命令也是不同&#xff0c;&#xff08;这不是脑子有问题吗&#xff1f; 干啥搞成不一样的&#xff09; 本次型号&#xff1a;S5735-L2…...

市面上加密混淆软件的比较和推荐

引言 市面上有许多加密混淆软件可供开发者使用&#xff0c;但哪些软件是最好用的&#xff1f;哪些软件受到开发者的喜爱&#xff1f;本文将根据一次在CSDN上的投票结果&#xff0c;为大家介绍几款在程序员中普及度较高的加密软件。以下是投票结果&#xff0c;希望能对大家的选择…...

最新AI创作系统ChatGPT网站源码AI绘画,GPTs,AI换脸支持,GPT联网提问、DALL-E3文生图

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…...

电视盒子哪个好?2024口碑网络电视盒子排行榜

多年来电视盒子始终占据重要地位&#xff0c;功能上并没有受到影响。在这么多品牌中哪些电视盒子的评价是最好的呢&#xff1f;小编根据各大电商平台的用户评价情况整理了口碑最好的网络电视盒子排行榜&#xff0c;跟着小编一起看看市面上的电视盒子哪个好吧。 TOP 1&#xff1…...

CookieSession

目录 什么是会话 一.Cookie 1.Cookie介绍 2.Cookie的作用 3.Cookie的基本使用 4.Cookie生命周期 5.Cookie有效路径 6.注意事项 二.Session 1.Session基本原理 2 Session的作用 3.Session的基本使用 4.Session底层实现机制 5.Session生命周期 什么是会话 Cookie和S…...

Nginx服务 重写功能与反向代理

六、重写功能 rewrite Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求&#xff0c;此功能依靠 PCRE(perl compatible regular expression)&#xff0c;因此编译之前要安装PCRE库&#xff0c;rewrite是nginx服务器的重要功能之一&#xff0c;用于实现URL的…...

Midjourney教程(完整版)-看这篇就够了

Midjourney使用指南 - 订阅计划费用比较 Midjourney 具有三个订阅版本。按月或全年支付可享受 20% 的折扣。每个订阅计划都包括访问 Midjourney 图库、官方 Discord、一般商业使用条款等。 如何订阅 使用该/subscribe命令生成指向订阅页面的个人链接。 或者&#xff0c;转到Mi…...

服务器上部署GPU版的milvus向量数据库

1、安装docker compose 我们可以从 Github 上下载它的二进制包来使用&#xff0c;最新发行的版本地址&#xff1a; https://github.com/docker/compose/releases sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-$(uname -s)…...

【配置】Docker安装可道云网盘

环境 一台云服务器&#xff0c;centos8&#xff0c;必须安装docker Docker安装 1、卸载旧版 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine2、需要的安装包 yum ins…...

复盘中得道,技术人的自由之路

从今天开始&#xff0c;后面会推出一个系列&#xff0c;也就是「复盘中得道&#xff0c;技术人的自由之路」。 如果再给我一次机会&#xff0c;我会这样规划我的成长路线&#xff0c;实现职业自由、财富自由、身心自由。 如果你站在童年的位置瞻望未来&#xff0c;你会说你前…...

Nginx配置大全【六大使用场景、七大负载均衡策略、四大负载健康检查】

目录 基础配置信息应用场景一&#xff1a;配置web服务器应用场景二&#xff1a;反向代理服务器应用场景三&#xff1a;URL重定向应用场景四&#xff1a;防盗链应用场景五&#xff1a;根据设备类型重定向/代理/访问 不同域名/资源应用场景六&#xff1a;&#xff01;负载均衡服务…...

GDPU Java 天码行空8

文章目录 &#xff08;一&#xff09;实验目的&#xff08;二&#xff09;实验内容和步骤1、LinkedList 实现队列&#x1f496; MyQueueDemo.java&#x1f496; 运行结果&#xff1a; 2、集合的嵌套遍历&#x1f496; StudentDemo.java&#x1f496; 运行结果&#xff1a; 3、类…...

《前端面试题》- JS基础 - 伪数组

第一次听说伪数组这个概念&#xff0c;听到的时候还以为是说CSS的伪类呢&#xff0c;网上一查&#xff0c;这东西原来还是个很常见的家伙。 何为伪数组 伪数组有两个特点&#xff1a; 具有length属性&#xff0c;其他属性&#xff08;索引&#xff09;为非负整数但是却不具备…...

TypeScript 基础语法

文章目录 1. 类型注解2. 接口&#xff08;Interfaces&#xff09;3. 类&#xff08;Classes&#xff09;4. 泛型&#xff08;Generics&#xff09;5. 枚举&#xff08;Enums&#xff09;6. 高级类型7. 模块8. 装饰器&#xff08;Decorators&#xff09;9. 映射类型&#xff08;…...

服务器数据恢复—V7000存储raid5数据恢复案例

服务器数据恢复环境&#xff1a; P740AIXSybaseV7000存储阵列柜&#xff0c;阵列柜上有12块SAS机械硬盘&#xff08;包括1块热备盘&#xff09;。 服务器故障&#xff1a; 管理员在日常巡检过程中发现阵列柜中有一块磁盘发生故障&#xff0c;于是更换磁盘并同步数据&#xff0…...

扫雷 【搜索,哈希】

9.扫雷 - 蓝桥云课 (lanqiao.cn) #include<bits/stdc.h> using namespace std; #define int long long const int N1e5100; int n,m,res0; struct pt{int x,y,r; }; typedef pair<int,int> pii; map <pii,int> a;//炸雷的map,键是x,y,值是r map <pii,int&…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

HTML中各种标签的作用

一、HTML文件主要标签结构及说明 1. <&#xff01;DOCTYPE html> 作用&#xff1a;声明文档类型&#xff0c;告知浏览器这是 HTML5 文档。 必须&#xff1a;是。 2. <html lang“zh”>. </html> 作用&#xff1a;包裹整个网页内容&#xff0c;lang"z…...