数据结构【二叉树的遍历实现】
📘考研数据结构基础:二叉树的存储、遍历与队列辅助实现详
在数据结构的学习中,二叉树作为一种结构清晰、应用广泛的树形结构,是考研计算机专业课中重点内容之一。本文将以实际代码为基础,介绍二叉树的存储结构、遍历方式,以及在遍历过程中为何要使用队列结构,并解答一个常见疑问:“为什么不能用 char
类型直接代替队列的元素类型”。
🧩一、二叉树的存储方式:链式存储结构
在实际开发或算法设计中,二叉树常采用链式存储结构。其基本定义如下:
typedef struct BiTNode {char data;struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
- 每个结点由一个字符
data
表示数据域。 lchild
和rchild
分别指向该结点的左、右子树。BiTree
是指向BiTNode
的指针,代表一个树的根结点。
🧪二、二叉树的遍历方式
✅ 1. 先序遍历(PreOrder)
void PreOrder(BiTree T) {if (T) {cout << T->data;PreOrder(T->lchild);PreOrder(T->rchild);}
}
先访问根结点,再递归遍历左子树和右子树。
✅ 2. 中序遍历(InOrder)
void InOrder(BiTree T) {if (T) {InOrder(T->lchild);cout << T->data;InOrder(T->rchild);}
}
先访问左子树,再访问根结点,最后遍历右子树。
✅ 3. 后序遍历(PostOrder)
void PostOrder(BiTree T) {if (T) {PostOrder(T->lchild);PostOrder(T->rchild);cout << T->data;}
}
先遍历左右子树,最后访问根结点。
✅ 4. 层序遍历(LevelOrder)
层序遍历不同于上面三种递归遍历,它需要用辅助队列实现。
void LevelOrder(BiTree T) {LinkQueue Q;InitQ(Q);EntQ(Q, T);while (!EmptyQ(Q)) {BiTree p;DelQ(Q, p);cout << p->data;if (p->lchild)EntQ(Q, p->lchild);if (p->rchild)EntQ(Q, p->rchild);}
}
🚩三、辅助队列结构及其核心设计
为了支持层序遍历的广度优先访问,我们需要一个队列,队列中存放的是树结点的指针而非字符:
typedef BiTree ElemType; // 关键设计:定义队列的元素类型为 BiTree(即指向树结点的指针)
队列的基本操作如下:
bool EntQ(LinkQueue &Q, ElemType x); // 入队
bool DelQ(LinkQueue &Q, ElemType &x); // 出队
❓为什么不能直接将 ElemType 改为 char?
这是许多初学者常见的疑惑。解释如下:
-
char
仅能存储字符,比如'A'
,却无法提供关于该字符结点的结构信息。 -
层序遍历时,我们需要访问一个结点的左右孩子:
if (p->lchild) EntQ(Q, p->lchild);
这里
p
是一个指向结构体的指针,如果你仅保存了char
,根本无法访问p->lchild
。
✅ 所以,队列中必须保存的是 BiTree
类型的指针,从而能继续递归或迭代处理其子树。
🧵四、二叉树的构建
构建过程通常采用先序递归建树法,使用 '#'
表示空结点:
void CreateTree(BiTree &T) {char ch;cin >> ch;if (ch == '#')T = NULL;else {T = new BiTNode;T->data = ch;CreateTree(T->lchild);CreateTree(T->rchild);}
}
输入示例(先序):
AB#D##C##
表示结构如下的树:
A/ \B C\D
🔚五、总结与考研建议
知识点 | 内容 |
---|---|
存储结构 | 常用链式存储,结构清晰,动态性强 |
遍历方法 | 先序、中序、后序、层序,掌握递归与非递归实现 |
辅助结构 | 层序遍历需要队列,存储的是结点指针 BiTree |
设计技巧 | 使用 typedef ElemType 抽象数据类型,增强复用性 |
完整代码《仅供参考》
function.h
//层次建树 借助一个辅助队列// a// b c// d e f g
#ifndef LEVELIRDER3_FUNCTION_H#define LEVELIRDER3_FUNCTION_H#include <stdio.h>#include <stdlib.h>#include <ostream>using namespace std;//树的结构体定义typedef struct BiTNode{char data;struct BiTNode *lchild,*rchild;}BiTNode , * BiTree;//队列的结构体的声明typedef BiTree ElemType;typedef struct LinkNode{ElemType datac;//在进行入队的时候 这里使用的是 int 类型的的数据 然而树存储的是一个char 类型的这时候就体现出的了 typedef 的作用了 不用频繁的修改数据struct LinkNode * next;}LinkNode;typedef struct { //声明一个结构体类型的指针LinkNode * front, * rear;}LinkQueue;void InitQ(LinkQueue &Q);bool EmptyQ(LinkQueue Q);//这里出入队列 实际上是对 树 的结点进行 的一个操作 所以应该使用 树的 结构体类型bool EntQ(LinkQueue &Q,ElemType x);bool DelQ(LinkQueue &Q, ElemType &x);// 建立一个辅助队列 tag 进行层序建树typedef struct tag{// BiTree p; //树的某一结点的地址值BiTNode *p;struct tag *pnext;}tag_t , *ptag_t;#endif //LEVELIRDER3_FUNCTION_H
queue.cpp
//// Created by Yhame on 2025/5/11.//#include "function.h"//初始化void InitQ(LinkQueue &Q){//这里的结构体类型 LinkNodeQ.front = Q.rear =(LinkNode*) malloc(sizeof(LinkNode));Q.front->next =NULL; //队头指向NULL}//判空 这里可以不用判断队列是否会满bool EmptyQ(LinkQueue Q){if(Q.front == Q.rear)return true;// Q.front->next =NULL;// return true;}//入队bool EntQ(LinkQueue &Q,ElemType x){//插入LinkNode *s =(LinkNode*)malloc(sizeof(LinkNode)); //申请新的结点 插入队尾if(!s)return false;s->datac =x; //尾巴插入Q.rear->next =s; //尾部入队 尾指针的指向ss->next =NULL; //s的指向NULLQ.rear =s; //更新尾指针return true;}//出队bool DelQ(LinkQueue &Q,ElemType &x){ //判空 从头开始删除if(Q.front ==Q.rear){return false;}LinkNode *q ;x = Q.front->next->datac; //返回要删除的数据q = Q.front->next; //q指向第一个数据结点 队头出Q.front->next =q ->next; //断开q 使front 指向后一个元素if(Q.rear==q){Q.rear = Q.front; // rear也回到front(空队列状态)}free(q);//如果q 为最后一个结点 使front 和rear 相等return true;}
main.cpp
#include <iostream>#include "function.h"//前序遍历void PreOrder(BiTree p){if(p!=NULL){printf("%c",p->data);PreOrder(p->lchild);PreOrder(p->rchild);}}//中序遍历void InOrder(BiTree p){if(p!=NULL){InOrder(p->lchild);printf("%c",p->data);InOrder(p->rchild);}}//后序遍历void PostOrder(BiTree p){if(p!=NULL){PostOrder(p->lchild);PostOrder(p->rchild);printf("%c",p->data);}}//层次遍历void LevelOrder(BiTree T){LinkQueue Q; //声明一个 辅助队列InitQ(Q);BiTree p; //记录树的当前结点// BiTNode * p;EmptyQ(Q);EntQ(Q,T); //树根入队当队列不为空进行 队头出队打印 之后判断 该点的 左右孩子是否为空 进行出入队操作puts("层序");while(!EmptyQ(Q)){DelQ(Q,p); //出队当前结点 并打印putchar(p->data); //printf("%c,c);if(p->lchild!=NULL){EntQ(Q,p->lchild);}if(p->rchild!=NULL){EntQ(Q,p->rchild);}}}int main() {BiTree pnew; //用来指向新申请的数结点BiTree tree =NULL; //tree 是指向树根的,代表树ptag_t phead= NULL,ptail =NULL, listpnew =NULL, pre =NULL; //初始化队列 定义一个pre 指向执行的当前元素char c;这里使用的是 tag 的方法去建立一棵树,通过辅助队列来实现的 层序遍历//abcdefwhile(scanf("%c",&c)){if(c=='\n'){break;}//calloc申请空间 大小是两个参数相乘,并对空间进行初始化 赋值为0;//malloc 申请以后还需要对其进行赋值 malloc 返回的是 void * 类型的 也需要进行强制转换树申请结点pnew =(BiTree) calloc(1,sizeof(BiTNode));pnew->data = c;//队列结点申请空间listpnew = (ptag_t) calloc(1,sizeof(tag_t)); //申请一个结构体类型的结点 返回一个指针类型的listpnew->p =pnew;//如果是数的第一个结点if(tree==NULL){tree = pnew; //tree 指向根的头结点//第一个结点 即是队列头也是 队列尾phead = ptail = listpnew;pre = listpnew; // 用来判断当前结点 的左右孩子是否满了}else {//元素直接入队ptail ->pnext = listpnew;ptail =listpnew;//接下来把元素放入树中if(pre->p->lchild ==NULL){pre ->p ->lchild =pnew; // pre -> p 左孩子为空 就放入左孩子}else if(pre->p->rchild==NULL){pre->p->rchild =pnew;pre = pre->pnext; // !!! 左右孩子都满了,指向下一个节点}}}puts("前序");PreOrder(tree);printf("\n");puts("中序");InOrder(tree);printf("\n");puts("后序");PostOrder(tree);printf("\n");LevelOrder(tree);return 0;//这没有对树进行相应的输出 ,使用调试发现建树完成}//abcdefg// 前序//abdecfg// 中序//dbeafcg// 后序//debfgca// 层序//abcdefg
这个代码实现了通过层次输入字符数据
来构建一棵二叉树,并对这棵二叉树进行前序、中序、后序、层序遍历
,完整地展示了树的构建与遍历过程。
✅ 具体功能如下:
1. 层次建树(用辅助队列实现)
- 利用自定义的
tag_t
辅助队列结构体进行层次建树。 - 每次输入一个字符就创建一个二叉树结点。
- 如果当前树为
空
(即首次输入),设置为根节点; - 后续的结点依次作为上一结点的
左孩子
、右孩子
插入; - 每插入完一个结点,就将其作为队列中的一个元素
排队
,继续等待为它的孩子分配子节点。
📘写在最后
学习数据结构尤其是二叉树,最重要的是掌握“结构 + 操作”的关系。每一次遍历、每一次入队出队,背后都是指针、结构体、递归这些基础能力的体现。希望本文结合实际代码的讲解能为你的学习提供实用帮助。
相关文章:
数据结构【二叉树的遍历实现】
📘考研数据结构基础:二叉树的存储、遍历与队列辅助实现详 在数据结构的学习中,二叉树作为一种结构清晰、应用广泛的树形结构,是考研计算机专业课中重点内容之一。本文将以实际代码为基础,介绍二叉树的存储结构、遍历方…...
稳态电路和瞬态电路
一、概述 稳态电路是指电路在长时间运行后达到的一种稳定状态; 瞬态电路是指电路在切换或者初始化节点经历过渡的过程。 在电路分析中,稳态和瞬态是动态电路的两个阶段。在电路中,如果有电感或者电容时, 他们的电压和电流不能瞬间…...
spark运行架构及核心组件介绍
目录 1. Spark 的运行架构1.1 Driver1.2 Executor1.3 Cluster Manager1.4 工作流程 2. Spark 的核心组件2.1 Spark Core2.2 Spark SQL2.3 Spark Streaming2.4 MLlib2.5 GraphX 3. Spark 架构图4. Spark 的优势4.1 高性能4.2 易用性4.3 扩展性4.4 容错性 5. 总结 1. Spark 的运行…...
Linux服务器常用运维工具/命令
常用工具/命令 1、查看内存使用 free -m上述命令用于显示系统中内存的使用情况,并将内存使用量以兆字节(MB)为单位显示。这个命令在 Linux 和类 Unix 系统上非常常见,是监视系统内存的一个简单而有用的工具。 具体而言…...
KaiwuDB 2.0:为 AIoT 而生,融合时序、关系与 AI 的未来数据库
目录: 引言:AIoT 数据洪流下的数据库“窘境”KaiwuDB 2.0:为 AIoT “量身定制”的智能数据基座核心利器:多模融合 + 原生 AI,解锁数据新范式不止于云:KaiwuDB Lite 轻装上阵边缘计算硬核实力:AIoT 场景下的显著优势技术基因:融合创新,构筑未来数据架构应用蓝图:深耕 A…...
Python打卡训练营Day22
浙大疏锦行 DAY 22 复习日 复习日 仔细回顾一下之前21天的内容,没跟上进度的同学补一下进度。 作业: 自行学习参考如何使用kaggle平台,写下使用注意点,并对下述比赛提交代码 kaggle 一、Kaggle 核心功能学习参考 注册与基础设置…...
Oracle — 内置函数
介绍 Oracle内置函数是数据库中预定义的编程工具,用于简化数据处理与计算逻辑。这些函数分为单行函数和聚合函数两大类。单行函数针对每条数据独立运算,例如LOWER函数转换文本为小写,ROUND实现数值四舍五入,TO_CHAR格式化日期输出…...
Kubernetes基础(三十二):Worker节点启动全解析
Worker节点是Kubernetes集群的"肌肉",负责实际运行业务负载。本文将深入剖析Worker节点的完整启动流程,并揭秘生产环境中的关键优化点。 一、启动流程全景图 二、核心启动阶段详解 1. 系统初始化(0-30秒) 关键任务&a…...
“爱生活”小项目问题总结
目录 爱生活小程序 1.用户登录和注册模块遇到的问题 1.1在使用密码加密时,注册新用户,客户端响应401的问题 原因: 正确操作: 1.2在设置密码加密后,发送post登录请求,服务器出现报错java.lang.reflect.…...
实战项目5(08)
目录 任务场景一 【r1配置】 【r2配置】 【r3配置】 任务场景二 【r1配置】 【r2配置】 任务场景一 按照下图完成网络拓扑搭建和配置 任务要求: 通过在路由器R1、R2和R3上配置静态路由,实现网络中各终端PC能够正常…...
LeetCode 1550.存在连续三个奇数的数组:遍历
【LetMeFly】1550.存在连续三个奇数的数组:遍历 力扣题目链接:https://leetcode.cn/problems/three-consecutive-odds/ 给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 tr…...
大模型在肾肿瘤诊疗全流程预测及方案制定中的应用研究
目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 研究创新点 1.4 研究方法与数据来源 二、肾肿瘤概述与大模型技术 2.1 肾肿瘤相关知识 2.1.1 定义、分类及症状 2.1.2 发病机制与影响因素 2.1.3 治疗现状与挑战 2.2 大模型技术原理及医疗应用现状 2.2.1 大模型…...
5月11号.
导入Maven项目: Maven依赖管理: 生命周期: 测试: 断言: Junit常见注解:...
数据库基础概述
一、基础概述 1.数据库 (1)概述 数据库就是存储数据的仓库,其本质是一个文件系统,按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作使用数据库可以高效的…...
Hibernate 性能优化:告别慢查询,提升数据库访问性能
Hibernate 性能优化:告别慢查询,提升数据库访问性能 Hibernate 作为一款流行的 ORM 框架,极大地简化了 Java 应用程序与数据库之间的交互,但如果不进行合理优化,性能瓶颈在高并发场景下就会暴露无遗。本文将深入探讨 …...
【JavaWeb+后端常用部件】
回顾内容看: 一、获取请求参数的方法 参考:[JavaWeb]——获取请求参数的方式(全面!!!)_java 获取请求参数-CSDN博客 Json格式的Body加备注RequestBody{id}动态路径加备注PathVariableid?&name?直接接收就好 i…...
Playwright 简介
Playwright 简介 说明:本教程基于 @playwright/test@1.51.1 版本编写,内容和目录结构与该版本官方推荐保持一致。 适合人群与学习路径 适合谁? 想入门自动化测试的测试工程师需要跨浏览器、移动端自动化的开发者希望提升测试效率、减少维护成本的团队学习建议 跟着文档动手实…...
# 2-STM32-复位和时钟控制RCC
STM32-复位和时钟控制RCC 2-STM32-复位和时钟控制RCC摘要说明本文参考资料如下: 一、STM32最小系统回顾STM32F103C8T6核心板原理图 二、复位三、时钟3.1 时钟树3.2 STM32启动过程3.2 SystemInit()函数3.2.1 SystemInit()第1句:3.2.2 SystemInit()第2句&a…...
idea中的vcs不见了,如何解决
按如下顺序依次找 filesettingsversion controldirectory mappings点击号vcs 改为Subversion 省流:看如下图...
元数据分类
元数据(Metadata)是描述数据的数据,通常分为 业务元数据、技术元数据 和 操作元数据。这三类元数据从不同维度对数据进行描述和管理,以下是它们的定义、作用和示例: 1. 业务元数据(Business Metadata&#…...
【C语言】(9)—指针3
文章目录 一、字符指针的深入理解二、数组指针详解三、二维数组传参的本质四、函数指针及其应用五、函数指针数组与转移表 一、字符指针的深入理解 1.1 字符指针的基本使用 字符指针(char*)是指向字符类型数据的指针,它有两种常见的使用方式: // 方式一…...
拍电影为什么常用绿幕?认识色度键控(Chroma Key)技术
许多电影拍摄使用绿幕技术,其核心原因在于它通过色度键控(Chroma Key)技术实现背景替换,从而为创作提供高度灵活性、成本效益和视觉效果的可控性。以下从技术原理、应用场景、优势及与其他技术的对比等方面展开分析: 一、绿幕技术的基本原理 绿幕技术的核心是色度键控(C…...
【iOS】Tagged Pointer
【iOS】Tagged Pointer 文章目录 【iOS】Tagged Pointer前言认识Tagged Pointer使用案例结构isa指针经典面试题 前言 在之前的学习中笔者在字符串章节简单了解过这个Tagged Pointer后面笔者就没在多了解这部分内容,今天决定比较系统的学习一下有关于这部分内容的知识. 认识Tagg…...
17.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--loki
在微服务中,日志是非常重要的组成部分。它不仅可以帮助我们排查问题,还可以帮助我们分析系统的性能和使用情况。 一、loki简介 loki是一个开源的日志聚合系统,它可以帮助我们高效地收集、存储和分析日志数据。loki的设计理念是“简单、快速…...
OpenWrt开发第8篇:树莓派开发板做无线接入点
文/指尖动听知识库-谷谷 文章为付费内容,商业行为,禁止私自转载及抄袭,违者必究!!! 文章专栏:Openwrt开发-基于Raspberry Pi 4B开发板 树莓派开发板作为无线接入点的时候,可以通过电脑和手机打开WiFi功能搜索到相应打开的WiFi; 1 通过Web操作界面开启wifi 1...
电源架构与太阳能充电器电路设计分析
一、电源架构基本工作原理分析 #mermaid-svg-mEaBEAY5xdCMN9Uy {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-mEaBEAY5xdCMN9Uy .error-icon{fill:#552222;}#mermaid-svg-mEaBEAY5xdCMN9Uy .error-text{fill:#5522…...
英语句型结构
句型类型结构示例示例解释应用场合简单句主谓(SV)The bird flies.“The bird” 是主语,“flies” 是不及物动词作谓语,描述鸟 “飞” 的动作。描述事物基本行为,如动物习性、自然现象等。主谓宾(SVO&#x…...
什么是卷积神经网络
卷积神经网络(CNN)的全面解析 卷积神经网络(Convolutional Neural Network, CNN)是深度学习领域最成功的模型之一,尤其在图像处理和模式识别任务中表现卓越。以下从基本结构、核心组件、发展历程、应用场景、数学基础、训练方法及优缺点等方面展开详述。 一、基本定义与核…...
操作系统: 第三章节 :中断和处理机调度
一:中断与中断系统 -1:中断的概念: 在程序运行过程中出现某紧急事件,必须中止当前正在运行的程序,转去处理这个事件,然后再恢复原来运行的程序,这一过程称为中断. -2:中断装置(硬件): 发现并相应中断的硬件结构: 工作: -----…...
嵌入式硬件篇---IIC
文章目录 前言1. IC协议基础1.1 物理层特性两根信号线SCLSDA支持多主多从 标准模式电平 1.2 通信流程起始条件(Start Condition)从机地址(Slave Address)应答(ACK/NACK)数据传输:停止条件&#…...
SAP学习笔记 - 开发08 - Eclipse连接到 BTP Cockpit实例
有关BTP,之前学了一点儿,今天继续学习。 SAP学习笔记 - 开发02 - BTP实操流程(账号注册,BTP控制台,BTP集成开发环境搭建)_sap btp开发-CSDN博客 如何在Eclipse中连接BTP Cockpit开发环境实例。 1…...
安装typescript时,npm install -g typescript报错
删除C:\Users\用户\下的.npmrc文件,如果你的没有,看是不是因为将隐藏的项目勾选上了,然后去掉勾选。 重新输入...
支持selenium的chrome driver更新到136.0.7103.92
最近chrome释放新版本:136.0.7103.92 如果运行selenium自动化测试出现以下问题,是需要升级chromedriver才可以解决的。 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only su…...
Java在人工智能中的应用:机器学习与深度学习技术探讨
根据您提供的知识库内容,我发现其中主要涉及机器学习和深度学习的内容,而您的文章是关于Java面试技术的。两者的主题并不直接相关,因此无法直接使用知识库中的信息来润色您的文章。 如果您希望将机器学习和深度学习的内容融入文章中…...
C++23 新特性:深入解析 std::views::join_with(P2441R2)
文章目录 std::views::join_with 基本用法处理字符串集合std::views::join_with 与其他视图的结合使用总结 随着C23标准的逐步推进,我们迎来了许多令人兴奋的新特性,其中之一就是 std::views::join_with。这个新特性是C23中引入的视图适配器,…...
【工作记录】crmeb后端项目打开、运行
1、下载代码 1)安装git 不再详述 2)git拉代码 项目地址如下,在vscode-分支中拉代码 # 克隆项目 git clone https://gitee.com/ZhongBangKeJi/crmeb_java/ 截图如下是已经成功拉下来 注意安装对应版本 2、maven配置 安装配置见&#x…...
前端浏览器判断设备类型的方法
前端浏览器判断设备类型的方法 在前端开发中,判断设备类型(如手机、平板、桌面电脑)有多种方法,以下是常用的几种方式: 1. 使用 User Agent 检测 通过 navigator.userAgent 获取用户代理字符串进行判断:…...
python 新闻 api + react js 客户端。
1. 起因, 目的: 前面写了几个爬虫。 那么这些数据怎么使用。使用 api , 看看到底有哪些新闻。感受:最初只是一个想法,然而实现的过程中却很枯燥乏味, 甚至怀疑为什么要做这个事情. 2. 先看效果 效果就是能行。 3.…...
Vivado中可新建的工程类型解析
以下是Vivado中可新建的工程类型解析,按用途和场景分类说明: 1. RTL Project(RTL工程) 用途:从零开始基于RTL代码(Verilog/VHDL)设计FPGA逻辑,覆盖完整开发流程。适用阶段ÿ…...
TypeScript 中的泛型工具详解
TypeScript 提供了一系列强大的泛型工具类型,可以帮助我们更灵活地操作和转换类型。以下是主要的泛型工具类型及其用法: 1. 基础工具类型 1.1. Partial<T> 将类型 T 的所有属性变为可选。 interface User {name: string;age: number; }type Pa…...
OpenCV进阶操作:指纹验证、识别
文章目录 前言一、指纹验证1、什么是指纹验证2、流程步骤 二、使用步骤(案例)三、指纹识别(案例)1、这是我们要识别的指纹库2、这是待识别的指纹图3、代码4、结果 总结 前言 指纹识别作为生物识别领域的核心技术之一,…...
js前端分片传输大文件+mongoose后端解析
最近一直在完善mongoose做webserver的项目,其中程序升级要通过前端传输升级包到服务器。 因为第一次写前端代码,分片传输的逻辑,网上一堆,大同小异,而且版本啊,API不一致的问题,导致头疼的很。后…...
IPLOOK超轻量核心网,助力5G专网和MEC边缘快速落地
随着5G深入千行百业,行业客户对核心网的灵活性、可控性和部署效率提出了更高要求。IPLOOK面向数字化转型需求,推出了超轻量级核心网解决方案,具备体积小、资源占用少、部署灵活、易于维护等特性,广泛适用于专网、实验室、MEC边缘云…...
Spring框架(一)
Spring框架是Java开发中最为流行的框架之一,它以其强大的功能和灵活的设计,极大地简化了企业级应用的开发。本文将详细介绍Spring框架的核心概念、核心技术、依赖注入、多配置文件方式、开发程序的方式、IOC注解方式以及Spring与JUnit的整合。 目录 一、…...
Redis 基础详解:从入门到精通
在当今互联网应用开发领域,数据存储与处理的性能和效率至关重要。Redis(Remote Dictionary Server)作为一款开源的、基于内存的键值存储系统,凭借其出色的性能和丰富的功能,被广泛应用于数据库、缓存、消息中间件等场景…...
24、TypeScript:预言家之书——React 19 类型系统
一、预言家的本质 "TypeScript是魔法世界的预言家之书,用静态类型编织代码的命运轨迹!" 霍格沃茨符文研究院的巫师挥动魔杖,类型注解与泛型的星轨在空中交织成防护矩阵。 ——基于《国际魔法联合会》第12号类型协议,Ty…...
RabbitMQ--进阶篇
RabbitMQ 客户端整合Spring Boot 添加相关的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 编写配置文件,配置RabbitMQ的服务信息 spri…...
【GESP真题解析】第 19 集 GESP 二级 2025 年 3 月编程题 1:等差矩阵
大家好,我是莫小特。 这篇文章给大家分享 GESP 二级 2025 年 3 月编程题第 1 题:等差矩阵。 题目链接 洛谷链接:B4259 等差矩阵 一、完成输入 根据题意,一行,两个正整数 n,m。 n 和 m的数据范围…...
电池单元和电极性能
电芯设计中的挑战 对于电池制造商来说,提高电池能量和功率密度至关重要。在高功率密度和长循环寿命之间取得平衡是电池设计中的关键挑战,通常需要仔细优化材料、电极结构和热管理系统。另一个关键挑战是通过优化重量体积比来降低电池单元的总体成本。 工…...
MATLAB 矩阵与数组操作基础教程
文章目录 前言环境配置一、创建矩阵与数组(一)直接输入法(二)特殊矩阵生成函数(三)使用冒号表达式创建数组 二、矩阵与数组的基本操作(一)访问元素(二)修改元…...