初级数据结构——邻接表
目录
- 前言
- 一、定义与结构
- 二、特点与性质
- 三、构建方式
- 四、操作与应用
- 五、代码模版
- 六、经典例题
- [1.——LCP 07. 传递信息](https://leetcode.cn/problems/chuan-di-xin-xi/description/)
- 代码题解
- [2.——547. 省份数量](https://leetcode.cn/problems/number-of-provinces/)
- 代码题解
- [3.——785. 判断二分图](https://leetcode.cn/problems/is-graph-bipartite/)
- 代码题解
- 七、总结
- 结语
前言
上一期我们已经一起学习了邻接矩阵这个数据结构,这一期我们一起学习它的兄弟初级数据结构——邻接表。邻接表是数据结构中用于表示图的一种重要方法,特别适用于稀疏图。以下是对初级数据结构邻接表的详细分析:
一、定义与结构
邻接表是一种数组与链表相结合的存储方式。它由一个一维数组(顶点表)和多个链表(边表或邻接链表)组成。
顶点表:一个一维数组,用于存储图中的顶点信息。数组中的每个元素对应图中的一个顶点,同时包含一个指向该顶点邻接链表的指针(或引用)。
边表(邻接链表):对于顶点表中的每个顶点,都有一个链表与之对应。链表中存储的是与该顶点相邻的所有顶点。在无向图中,每条边在邻接表中出现两次(两个顶点各指向对方一次);在有向图中,则只出现一次,表示有向边的方向。
二、特点与性质
空间利用率高:邻接表只需要存储实际存在的边和顶点,因此相对于邻接矩阵(需要存储所有可能的边,即使它们不存在)来说,空间利用率更高。
遍历速度快:在邻接表中,遍历与某顶点相邻的全部顶点时,时间复杂度与顶点的度成正比。对于稀疏图而言,这比邻接矩阵表示法的时间复杂度要低。
灵活性:在邻接表中,可以方便地添加或删除边,同时能够快速地访问某个顶点的所有邻接点。
访问性较差:要确定两个顶点之间是否存在边,需要遍历其中一个顶点的邻接链表,这比邻接矩阵的O(1)时间复杂度要慢。
三、构建方式
初始化顶点表:根据图的顶点数,分配顶点表的空间,并初始化每个顶点的邻接链表为空。
读入边信息:根据图的边信息(对于无向图,每条边读入两次;对于有向图,每条边读入一次),为每个顶点建立相应的邻接链表。
构建邻接链表:对于每条边,创建一个边表结点,并将其插入到对应顶点的邻接链表中。
四、操作与应用
图的遍历:邻接表广泛应用于图的遍历算法中,如深度优先搜索(DFS)和广度优先搜索(BFS)。
最短路径问题:如Dijkstra算法、Bellman-Ford算法等,这些算法可以利用邻接表高效地找到图中任意两点之间的最短路径。
拓扑排序:在拓扑排序中,邻接表可以帮助确定图中顶点的线性顺序,使得对于每一条有向边(u, v),顶点u在顶点v之前。
关键路径:在项目管理中,邻接表可以用于确定项目的关键路径,即项目中耗时最长的路径。
五、代码模版
#include<iostream>
using namespace std;class Graph {struct EdgeNode//代表每个节点的结构体{int vertex;//定点编号int weight;//另一个点到这个点的权值,就是距离EdgeNode* next;};struct VertexNode {//代表每个链表的结构体int vertex;//定点编号EdgeNode* firstEdge;//每个链表的头结点};int vertices;//顶点个数,也是链表个数VertexNode* nodes;
public:Graph(int vertices);~Graph();void addEdge(int u, int v, int w);void printGraph();
};Graph::Graph(int vertices) {this->vertices = vertices;this->nodes = new VertexNode[vertices];for (int i = 0; i < vertices; i++) {nodes[i].vertex = i;nodes[i].firstEdge = NULL;//初始化每个链表头结点都为空,也就是每个节点都不相连}
}Graph::~Graph() {for (int i = 0; i < vertices; i++) {EdgeNode* curr = nodes[i].firstEdge;while (curr) {EdgeNode* t = curr;curr = curr->next;delete t;}}delete[]nodes;
}void Graph::addEdge(int u, int v, int w) {EdgeNode* newNode = new EdgeNode;newNode->vertex = v;newNode->weight = w;newNode->next = nodes[u].firstEdge;//将这个节点,用头插法插入链表中nodes[u].firstEdge = newNode;
}void Graph::printGraph() {for (int i = 0; i < vertices; i++) {EdgeNode* curr = nodes[i].firstEdge;cout << "Vertex" << i << " ";while (curr) {cout << curr->vertex << "(" << curr->weight << ")";curr = curr->next;}cout << endl;}
}int main() {Graph graph(5);graph.addEdge(0, 1, 4);graph.addEdge(0, 2, 2);graph.addEdge(1, 2, 3);graph.addEdge(2, 3, 4);graph.addEdge(3, 4, 2);graph.printGraph();return 0;
}
六、经典例题
1.——LCP 07. 传递信息
代码题解
class Solution {//这题就是比较典型的深度优先搜索vector<int> edges[10];int N;int dfs(int u,int k){if(!k)return (u==N-1)?1:0;//k为零的时候就只用判断起始顶点,它也作为递归出口int sum=0;for(int i=0;i<edges[u].size();i++){int v=edges[u][i];sum+=dfs(v,k-1);}return sum;}
public:int numWays(int n, vector<vector<int>>& relation, int k) {N=n;for(int i=0;i<N;i++){edges[i].clear();}for(int i=0;i<relation.size();i++){int a=relation[i][0];int b=relation[i][1];edges[a].push_back(b);//建表过程}return dfs(0,k);}
};
2.——547. 省份数量
代码题解
class Solution {//这题其实就是让我们求连通分量的个数vector<int> edges[201];bool color[201];int count;int n;void dfs(int u){//深度优先搜索把这个定点所在的联通分量的所有顶点都访问过if(color[u])return;//递归出口,访问过就退出color[u]=true;//对该节点标记为访问过了for(int i=0;i<edges[u].size();i++){int v=edges[u][i];dfs(v);}}
public:int findCircleNum(vector<vector<int>>& isConnected) {n=isConnected.size();count=0;memset(color,false,sizeof(color));for(int i=0;i<n;i++){edges[i].clear();for(int j=0;j<isConnected.size();j++){if(isConnected[i][j]){edges[i].push_back(j);}}}for(int i=0;i<n;i++){if(color[i]==false){dfs(i);++count;//没访问过的定点就自增一}}return count;}
};
3.——785. 判断二分图
代码题解
class Solution {//这题半段二分图一个很好的方法,判断改图是否有奇环,就是成环的节点个数为奇数int color[101];//染色法,将该节点相邻节点全部染色,然后到他相邻的任意节点开始染色,如果发现它相邻的节点被染色过说明存在奇环
public:bool isBipartite(vector<vector<int>>& graph) {memset(color,-1,sizeof(color));//所有节点初始化为-1,一开始没有进行任何的染色int n=graph.size();while(1){int u=-1;for(int i=0;i<n;i++){if(color[i]==-1){u=i;break;}}if(u==-1)break;//所有的点都被染色了就跳出循环color[u]=0;//将该点进行染色queue<int>q;q.push(u);while(!q.empty()){//广度优先搜索u=q.front();q.pop();for(int i=0;i<graph[u].size();i++){int v=graph[u][i];if(color[v]!=-1){//说明被染色过了就不是二分图if(color[v]==color[u])return false;}else{color[v]=1-color[u];//没染过色就标记为染过了q.push(v);}}}}return true;}
};
七、总结
综上所述,邻接表是图论中一种非常重要的存储结构,它结合了数组和链表的优点,能够高效地表示和处理稀疏图。
结语
下期我们一起来学习最后一个初级数据结构——哈希表,大家坚持住,学完它我们对初级数据结构的学习就告一段落了,然后就是学习比较有难度的算法了,如Dijkstra算法、Bellman-Ford算法等,所以大家要理解好邻接矩阵和邻接表这两个数据结构,那么我们下期不见不散。
关注我让我们一起学习编程,希望大家能点赞关注支持一下,让我有持续更新的动力,谢谢大家
相关文章:
初级数据结构——邻接表
目录 前言一、定义与结构二、特点与性质三、构建方式四、操作与应用五、代码模版六、经典例题[1.——LCP 07. 传递信息](https://leetcode.cn/problems/chuan-di-xin-xi/description/)代码题解 [2.——547. 省份数量](https://leetcode.cn/problems/number-of-provinces/)代码题…...
思维导图+实现一个登录窗口界面
QQ2024122-205851 import sys from PyQt6.QtGui import QIcon, QPixmap, QMovie from PyQt6.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton, QLabel, QVBoxLayout# 封装我的窗口类 class LoginWidget(QWidget):# 构造函数def __init__(self):# 初始化父类su…...
多级缓存设计实践
缓存是什么? 缓存技术是一种用于加速数据访问的优化策略。它通过将频繁访问的数据存储在高速存储介质(如内存)中,减少对慢速存储设备(如硬盘或远程服务器)的访问次数,从而提升系统的响应速度和…...
ElasticSearch学习笔记一
目录 1.ElasticSearch-Head如何启动 2.ElasticSearch-Head创建索引 2.1创建索引时的“分片数”和“副本数”是什么意思? 类比 1:图书馆的书架与备份 类比 2:快递分拣中心与包裹副本 总结 编辑 2.2如何查看现有索引的分片数和备份数 …...
A058-基于Spring Boot的餐饮管理系统的设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看项目链接获取⬇️,记得注明来意哦~🌹 赠送计算机毕业设计600个选题ex…...
代码设计:设计模式:应对变化
文章目录 概述1.拆分代码2.解耦3.扩展总结概述 代码的设计模式主要为了应对变化 三种代码设计中应对变化的方式 1.拆分代码 2.解耦 3.扩展 1.拆分代码 减小变化对代码的影响 需要拆分代码的几种情况 1.类或方法的代码量巨大,导致代码可读性降低 2.存在复杂的代码,如…...
《Vue 路由导航:打造流畅的单页应用一》
一、Vue Router 简介 Vue Router 是什么? Vue Router 是 Vue.js 官方提供的路由管理器,用于构建单页面应用并实现页面间导航。它基于 Vue 的组件系统构建,通过配置路由将浏览器的 URL 和用户看到的内容绑定起来。当用户在应用中浏览不同页面…...
【xshell连接失败】
xshell用pem连接失败 Warning: Identity file ”open_api_test.ssh not accessible: No such file or directory. Warning: Identity file open_api_test2.pem not accessible: No such file or directory. Permission denied (publickey,gssapi-keyex,gssapi-with-mic). 搞了半…...
说说Elasticsearch拼写纠错是如何实现的?
大家好,我是锋哥。今天分享关于【说说Elasticsearch拼写纠错是如何实现的?】面试题。希望对大家有帮助; 说说Elasticsearch拼写纠错是如何实现的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Elasticsearch 中&…...
实例讲解MATLAB绘图坐标轴标签旋转
在进行绘图时需要在图片上添加上做标轴的标签,但是当数据量比较多时,例如一天24小时的数据,这时把每个小时显示在左边轴的标签上,文字内容放不下,因此需要将坐标轴标签旋转一定的角度,这样可以更好在图形上…...
Win10+Ubuntu20.04双系统重装Ubuntu22.04单系统
从去年 8 月美化 Ubuntu 系统后一直存在内核错误问题,但因为大部分功能还能正常使用,只是在 apt 时报错,所以一直逃避不想重装,直到最近 12 月新的开始,恰好设置的界面打不开得重装 gnome ,所以下定决心重装…...
eBPF:现代Linux的强大内核扩展技术
eBPF:现代Linux的强大内核扩展技术 eBPF(Extended Berkeley Packet Filter)是一项变革性的技术,它为Linux内核提供了一个灵活的、可编程的方式来处理数据包过滤、网络监控、安全性和系统性能分析等多种任务。 1. eBPF简介 1.1 …...
深度学习-52-AI应用实战之基于Yolo8的目标检测自动标注
文章目录 1 YOLOv81.1 YOLOV8的不同版本1.2 可检测类别1.3 数据说明1.4 网络结构1.5 算法核心步骤2 目标检测的基本原理2.1 安装yolov8(cpu版本)2.2 图片检测2.3 视频检测2.4 自动标注2.5 保存标注结果3 参考附录1 YOLOv8 YOLOv8是一种前沿的计算机视觉技术,它基于先前YOLO版…...
人工智能工作流程概述:从数据到智能决策
目录 一、引言 二、人工智能工作流程概述 (一)数据收集 (二)数据预处理 (三)模型选择与设计 (四)模型训练 (五)模型评估 (六)模…...
Jenkins升级到最新版本后无法启动
1. 场景还原 最近在web界面将jenkins升级到最新版本后,后台无法启动jenkins服务,服务状态如下: 运行jenkins命令提示invalid Java version jenkins --version jenkins: invalid Java version: java version "1.8.0_202" Java(TM)…...
.net core MVC入门(三)——Product页面添加
文章目录 项目地址一、Product数据库准备 项目地址 教程作者:教程地址: 代码仓库地址: 所用到的框架和插件: dbt airflow一、Product数据库准备 添加Product的EF上下文 public DbSet<Category> Categories { get; set; …...
【Java基础】笔记
List和ArrayList区别 public class Arrays_BugDemo {public static void main(String[] args){/** List 是一个固定大小的列表,虽然可以进行查询操作,但不支持添加、删除或修改元素。* 如果需要一个可以动态修改的列表,可以使用 ArrayList 进…...
Docker 进阶指南:常用命令、最佳实践与资源管理
Docker 进阶指南:常用命令、最佳实践与资源管理 Docker 作为一种轻量级的容器化技术,已经成为现代软件开发和部署不可或缺的工具。本文将为您深入介绍 Docker 的常用命令、最佳实践以及如何有效管理容器资源,帮助您更好地在 Ubuntu 22.04 或…...
C++编写静态库
1、新建项目创建静态库staticLib1. demoStaticLib.h #pragma once class ArrayTool { public:int Max(const int* lpHead, const int nLength);int Sum(const int* lpHead, const int nLength); }; demoStaticLib.cpp #include "pch.h" #include "demoStati…...
oracle数据库日常操作
1、执行SQL语句后不显示PL/SQL procedure successfully completed set feedback off; 2、显示实例名称 echo "set sqlprompt \"_user_connect_identifier> \"" >> $ORACLE_HOME/sqlplus/admin/glogin.sql 3、客户端尝试连接到服务器时发生超时 …...
行驶证 OCR 识别API接口的影响因素
一、影响因素 (一)证件质量与图像质量 行驶证的质量对OCR 识别 API 界面的效果有重要影响。清晰的文件可以使识别系统准确地捕获文本信息,而模糊的文本可能会导致识别错误。而且不同地区、不同年份的行驶证在字体、排版、格式等方面可能存在差异,甚至可…...
什么是TCP/IP和UDP
TCP/IP和UDP都是网络协议,用于不同计算机或设备之间的通信。它们的作用是定义数据如何在网络上传输,但它们在传输方式、可靠性和效率上有显著的区别。 1. TCP/IP TCP/IP(传输控制协议/互联网协议,Transmission Control Protocol…...
1074 Reversing Linked List (25)
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K3, then you must output 3→2→1→6→5→4; if K4, you must output 4→3→2→1→5→6. Input Specif…...
layui table 纵向滚动条导致单元格表头表体错位问题
我用的时layui2.6.8版本 历史项目维护,bug给我让我做了,本来利用前端手段强解决,后来发现很多table 找了解决办法 打开layui-v2.6.8/lay/modules/table.js 如果打开后时压缩的代码 直接搜索 e.find(".layui-table-patch") …...
算法基础 - 求解非线性方程(牛顿法)
文章目录 1. 前言2. 牛顿迭代算法2.1. 基本思想2.2. 如何求解 x12.3. 如何求解 x22.4. 收敛性2.5. 编码实现2.5.1. 递归实现2.5.2. 非递归实现 1. 前言 前文介绍了如何使用“高斯消元法”求解线性方程组。本文秉承有始有终的态度,继续介绍“非线性方程”的求解算法。…...
[C#]C#实现数字到人民币大写金额的转换
在软件开发中,将数字转换成人民币大写形式的需求通常出现在需要生成财务报表、发票、收据、账单等正式文档的场景中。这些文档往往需要遵循一定的格式和规范,以确保信息的准确性和可读性,特别是在处理与金钱相关的数据时。 比如: …...
Base64.cv:高效安全的在线Base64转换工具详解
在日常开发中,Base64编解码是一个非常常见的需求。本文将介绍一款优秀的在线Base64转换工具:Base64.cv。 工具特点 1. 性能优势 采用浏览器原生API,转换速度快本地运算,无服务器延迟支持大容量文本处理 2. 安全性 纯客户端处…...
前端面试热门题(二)[html\css\js\node\vue)
Vue 性能优化的方法 Vue 性能优化的方法多种多样,以下是一些常用的策略: 使用v-show替换v-if:v-show是通过CSS控制元素的显示与隐藏,而v-if是通过操作DOM来控制元素的显示与隐藏,频繁操作DOM会导致性能下降。因此&am…...
施耐德电气:多维解构AI挑战,引领产业创新变革
CSDN 看到,大模型正在掀起一场智能化革命,带来计算、开发、交互三大范式全面升级和转换,其中 AI 计算范式正在从图灵、冯诺伊曼计算范式转为神经网络计算范式。AI 技术仍在快速发展,AI 算力基础设施的数据中心如果仍走“堆资源、堆…...
Unity的GPU Instancing技术
首先新建一个场景,添加一个相机,并创建一个Render Texture给相机。 然后在相机上挂载以下脚本TestBatches ,同时脚本的Inspector面板的Mesh中选择Cube,另外创建一个新的材质拖动给mat: public class TestBatches : M…...
JVM指令集概览:基础与应用
写在文章开头 在现代软件开发中,Java 语言凭借其“一次编写,到处运行”的理念成为了企业级应用的首选之一。这一理念的背后支撑技术正是 Java 虚拟机(JVM)。JVM 是一个抽象的计算机,它实现了 Java 编程语言的各种特性,并且能够执行编译后的字节码文件。了解 JVM 的工作原…...
使用 Redis Stream 结合 Redission DelayedQueue 实现延迟消息队列(已上线生产)
一、Redis Stream 介绍 Redis Stream 是 Redis 5.0 版本新增加的数据结构,作为一种轻量级的消息队列,Redis Stream 作为一种轻量级的消息队列,适合资源有限或对性能要求较高的场景。 Redis Stream 主要用于消息队列(MQÿ…...
时频转换 | Matlab基于递归图Reccurence Plots一维数据转二维图像方法
目录 基本介绍程序设计参考资料获取方式 基本介绍 时频转换 | Matlab基于递归图Reccurence Plots一维数据转二维图像方法 程序设计 clear clc close allfs 6400 ; % 数据采样频率 N 5120; % 信号的点数% 生成时间向量 t (0:N-1) / fs; % 生成正弦信号 x sin(2 * pi * 15…...
《手写Spring渐进式源码实践》实践笔记 (第二十一章 将ORM框架整合到Spring容器中)
文章目录 第二十一章 ORM框架整合Spring背景目标设计实现代码结构类图实现步骤 测试事先准备属性配置文件测试用例测试结果: 总结 第二十一章 ORM框架整合Spring 背景 MyBatis-Spring 能够实现 MyBatis 与 Spring 框架的无缝集成。它使得 MyBatis 能够参与 Spring…...
数据库管理-第267期 23ai:Oracle Data Redaction演示(20241128)
数据库管理267期 2024-11-286 数据库管理-第267期 23ai:Oracle Data Redaction演示(20241128)1 示例表及数据2 创建编校策略2.1 名字全编校2.2 电话部分编校 3 DML演示3.1 场景13.2 场景2 总结 数据库管理-第267期 23ai:Oracle Da…...
NGO-CNN-BiGRU-Attention北方苍鹰算法优化卷积双向门控循环单元时间序列预测,含优化前后对比
NGO-CNN-BiGRU-Attention北方苍鹰算法优化卷积双向门控循环单元时间序列预测,含优化前后对比 目录 NGO-CNN-BiGRU-Attention北方苍鹰算法优化卷积双向门控循环单元时间序列预测,含优化前后对比预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介…...
第六届国际科技创新学术交流会暨管理科学信息化与经济创新发展(MSIEID 2024)
重要信息 大会官网:msieid2024.iaecst.org (点击了解大会,参会等内容) 大会时间:2024年12月6-8日 大会地点:中国-广州 大会简介 随着全球化和信息化的不断深入,管理科学、信息化和经济发展…...
【计算机视觉算法与应用】模板匹配、图像配准
目录 1. 基于灰度值的模板匹配 2. 基于相关性的模板匹配 3. 基于形状的模板匹配 4. 基于组件的模板识别 5. 基于形变的模板匹配 6. 基于描述符的模板匹配 7. 基于点的模板匹配 性能比较 模板匹配的算法实现需要结合具体需求和应用场景来选择方法。以下是基于 OpenCV 的…...
HHO-CNN-BiGRU-Attention哈里斯鹰优化算法卷积神经网络结合双向门控循环单元时间序列预测,含优化前后对比
HHO-CNN-BiGRU-Attention哈里斯鹰优化算法卷积神经网络结合双向门控循环单元时间序列预测,含优化前后对比 目录 HHO-CNN-BiGRU-Attention哈里斯鹰优化算法卷积神经网络结合双向门控循环单元时间序列预测,含优化前后对比预测效果基本介绍模型描述程序设计…...
数据并行、模型并行与张量并行:深度学习中的并行计算策略(中英双语)
中文版 数据并行、模型并行与张量并行:深度学习中的并行计算策略 随着深度学习模型的不断增大,单个计算节点(例如单个 GPU)的计算和内存能力逐渐成为了限制训练效率和模型规模的瓶颈。为了应对这些挑战,深度学习社区…...
大数据-239 离线数仓 - 广告业务 测试 FlumeAgent 加载ODS、DWD层
点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop࿰…...
Python中的数据结构深入解析:从列表到字典的优化技巧
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! Python是一门以易用性和可读性著称的高级编程语言,其内置的数据结构为开发者提供了强大的工具,但了解其底层实现及性能优化策略却常被忽略。本文深入探讨Python中的核心数据结构,包括列表(list)、元组…...
【JS】JS判断数据类型
typeof // typeof 后面括号有没有都可以 console.log(typeof(a)) // string console.log(typeof(123)) // number console.log(typeof(undefined)) // undefined console.log(typeof(true)) // boolean console.log(typeof(Symbol(123))) // symbolconsole.log(typeof(null)) /…...
基于jmeter+perfmon的稳定性测试记录
软件测试资料领取:[内部资源] 想拿年薪40W的软件测试人员,这份资料必须领取~ 软件测试面试刷题工具领取:软件测试面试刷题【800道面试题答案免费刷】 1. 引子 最近承接了项目中一些性能测试的任务,因此决定记录一下,…...
【0351】Postgres内核 Open WAL segment(包含 WAL 位置 ‘RecPtr’)(2 - 4)
上一篇: 文章目录 1. 打开 WAL Segment2. Standby mode 由一个 状态机(state machine)实现2.1 何处获取 WAL 文件?2.1.1 XLogSource2.1.2 从所选源(XLogSource )读取 XLOG2.1.2.1 walreceiver 运行状态 ?2.1.3 readFile(XLOG 文件句柄)1. 打开 WAL Segment 在经过前…...
Mysql基础
什么是关系型数据库? 顾名思义,关系型数据库(RDB,Relational Database)就是一种建立在关系模型的基础上的数据库。关系模型表明了数据库中所存储的数据之间的联系(一对一、一对多、多对多)。 …...
Altium Designer学习笔记 24 PCB初始布局2
基于Altium Designer 23学习版,四层板智能小车PCB 更多AD学习笔记:Altium Designer学习笔记 1-5 工程创建_元件库创建Altium Designer学习笔记 6-10 异性元件库创建_原理图绘制Altium Designer学习笔记 11-15 原理图的封装 编译 检查 _PCB封装库的创建Al…...
【从0学英语】形容词性/名词性物主代词是什么?
在英语中,物主代词是非常重要的语法概念之一,特别是对于初学者来说。理解形容词性物主代词和名词性物主代词的不同,能够帮助我们在日常对话中准确地表达拥有关系。在这篇文章中,我们将深入探讨这两个概念,并通过详细的…...
hhdb数据库介绍(10-29)
管理 数据备份 从存储节点或灾备机房数据备份 选择灾备机房类型、从库(双主备库)存储节点类型进行备份,页面根据选择类型,对应给出提示信息。发起备份时,检测从存储节点状态是否符合备份条件。 主从数据一致性检测…...
springboot(20)(删除文章分类。获取、更新、删除文章详细)(Validation分组校验)
目录 一、删除文章分类功能。 (1)接口文档。 1、请求路径、请求参数。 2、请求参数。 3、响应数据。 (2)实现思路与代码书写。 1、controller层。 2、service接口业务层。 3、serviceImpl实现类。 4、mapper层。 5、后端接口测试。…...