数据结构与算法基础(青岛大学-王卓)(8)

哎呀呀,sorry艾瑞波地,这次真的断更一个月了,又发生了很多很多事情,秋风开始瑟瑟了,老父亲身体查出肿瘤了,有病请及时就医,愿每一个人都有一个健康的身体,God bless U and FAMILY.
直接上货了 😃


文章目录

    • 查找
      • 概念
      • 线性表的查找
        • 顺序查找(线性)
          • 应用范围:
          • 表示方法:
          • 算法:
          • 算法7.2时间效率分析:
          • 讨论
          • 优缺点:
        • 折半查找(对半/二分)
          • 算法思路
          • 二分查找效率分析 - 判定树
          • 平均查找长度ASL(成功时)
          • 优缺点
        • 分块查找(索引顺序查找)
          • 条件
          • 性能分析
          • 优缺点
      • 树表的查找
        • 二叉排序树 (Binary Sort Tree)
          • 二叉排序树定义
          • 二叉排序树的性质
          • 二叉排序树查找
          • 二叉排序树的插入
          • 二叉排序树的生成
          • 二叉排序树的删除
          • 平衡二叉树
      • 散列表的查找
        • 散列表术语
        • 散列函数构造方法
          • 直接定址法
          • 除留余数法
        • 处理冲突的方法
          • 开放地址法
          • 链地址法
        • 散列表查找

查找

内容回顾:
在这里插入图片描述

概念

  • 查找表是由同一类型的数据元素(或记录)构成的集合。由于"集合"中的数据元素之间存在着松散的关系,因此查找表是一种应用灵便的结构。

  • 查找 – 根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素或(记录),查找成功返回该记录信息或者位置,查找不成功则给出空记录或者空指针。

  • 关键字:用来标识一个数据元素(或记录)的某个数据项的值。分为 主关键字(可唯一地标识一个记录的关键字) 和 次关键字(用以识别若干记录的关腱字)。

  • 对查找表的操作:查询记录, 检索属性, 插入数据元素, 删除数据元素。

  • 查找表分类:

    • 静态(仅查询)
    • 动态(可插入,删除)
  • 查找算法的评价指标 – 平均查找长度(关键字的平均比较次数) – ASL(Average Search Length)

    在这里插入图片描述

  • 查找的方法取决于查找表的结构,即表中数据元素是依何种关系组织在一起的。为提高查找效率,一个办法就是在构造查找表时,在集合中的数据元素之间人为地加上某种确定的约束关系

线性表的查找

顺序查找(线性)
应用范围:
  • 顺序表或线性链表表示的静态查找表
  • 表内元素之间无序
表示方法:
// 数据元素的类型定义
typedef struct {KeyType key; //关键字域......       //其他域
} ElemType;// 顺序表结构类型定义
typedef struct {ElemType *R; // 表基址int length; //表长
} SSTable; //Sequential Search Table//定义一个顺序表ST
SSTable ST;
算法:

在这里插入图片描述

// 算法7.1
int Search_Seq(SSTable ST, KeyType key) {// 如成功则返回位置信息,不成功返回0for(i=ST.length; i>=1; --i) {if (ST.R[i].key == key) return i;return 0;}
}
// 算法改1
int Search_Seq(SStable ST, KeyType key) {for(i=ST.length; ST.R[i].key != key; --i)if (i<=0) break;if (i>0) return i;else return 0;
}// 算法改2
inti Search_Seq(SStabl ST, KeyType key) {for(i=ST.length; ST.R[i].key != key&&i>0; --i);if (i>0) return i;else return 0;
}

上面的算法的每一次循序都需要进行两次比较,能否改进?

  • 查找的值是否相等
  • i的值是否越界

改进:

把待查关键字 key 存入表头("哨兵、“监视哨”) 从后往前个比较,可免去查找过程中每一步都要检测是否查找完毕,加快速度。(如果找不到在表头[0]位置也一定会找到)。

当ST.length较大时,此改进能使进行一次查找所需的平均时间几乎减少一半。

在这里插入图片描述

// 改进算法7.2
int Search_Seq(SSTable ST, KeyType key) {ST.R[0].key = key;for (i=ST.length; ST.R[i].key != key; --i);return i;}
}
算法7.2时间效率分析:

在这里插入图片描述

时间复杂度:O(n)

查找成功时的平均查找长度,设表中各记录查找概率相等(注意这里是指的是查找成功时所以不算哨兵位置)

ASLs(n)=(1 + 2 +…+ n)/n = (n+1)/2

空间复杂度:O(1) — 辅助空间用于哨兵位置

讨论

1 、记录的查找概率不相等时如何提高查找效率?

查找表存储记录原则按照查找概率高低存储:1 )查找概率越高,比较次数越少;2 )查找概率越低,比较次数较多。

2 、记录的查找概率无法测定日日何提高查找效率?

方法 – 按查找概率动态调整记录顺序.1 )在每个记录中设一个访问频度域;2 )始终保持记录按非递增有序的次序排列;3 )每次查找后均将刚查到的记录直接移至表头。

优缺点:

优点:算法简单,逻辑次序无要求,且不同存储结构均适用。

缺点:ASL 太长,时间效率太低。

折半查找(对半/二分)

折半查找:每次将待查记录所在区间缩小一半。

在这里插入图片描述

算法思路

非递归算法

  • 设表长为n,low、high 和 mid 分别指向待查元素所在区间的上界、下界和中点, key 为给定的要查找的值.

  • 初始时,令low = 1,high=n, mid=$\lfloor(low+high)/2\rfloor $

  • 让 k 与 mid 指向的记录比较

    • 若key == R[mid].key 查找成功
    • 若key < R[mid].key, 则 high=mid-1
    • 若 key > R[mid].key, 则 low=mid+1
  • 重复上述操作,直至 low>high 时,查找失败

// 二分查找(非递归)
int Search_Bin(SSTabl ST, KeyType key) {low = 1;high = ST.length; // 初始化置区间值while (low <= high) { mid = (low + high) / 2;if (ST.R[mid].key == key) return mid; // 找到元素else if (ST.R[mid].key < key) {  // 缩小区间low = mid + 1; // 继续在后半区查找} else high = mid -1; // 继续在前半区查找}return 0; // 表中不存在待查元素
} // Search_Bin// 二分查找(递归)
int Search_Bin(SSTable ST, KeyType key, int low, int high) {if (low > high) return 0; // 查找不到时返回0mid = (low + high)/2if (ST.R[mid].key == key) return mid;else if (ST.R[mid].key > key) {Search_Bin(ST, key, low, mid-1);} else {Search_Bin(ST, key, mid+1, high);}
}
二分查找效率分析 - 判定树

在这里插入图片描述

在这里插入图片描述

平均查找长度ASL(成功时)

在这里插入图片描述

优缺点

折半查找优点:效率比顺序查找高

折半查找缺点:只适用于有序表,且限于顺序存储结构(对线性链表无效)。

分块查找(索引顺序查找)
条件
  1. 将表分成几块,且表或者有序,或者分块有序;若i < j,则第 j 块中所有记录的关键字均大于第 i 块中的最大关键字。

  2. 建立"索引表"(每个结点含有最大关键字域和指向本块第一个结点的指针,且按关键字有序)。

    查找过程:找38 --> 目标在索引48的块中 --> 顺序/折半在块内查找–> 找到38

    在这里插入图片描述

性能分析

在这里插入图片描述

优缺点

优点:插入和删除比较容易,无需进行大量移动。

缺点:要增加一个索引表的存储空间并对初始索引表进行排序运算。

适用情况如果线性表既要快速查找又经常动态变化,则可采用分块查找。

在这里插入图片描述

树表的查找

动态查找表 – 几种特殊的树, 用来解决插入,删除频繁操作但需要维护表的有序性情况。

表结构在查找过程中动态生成对于给定值 key若表中存在,则成功返回;否则,插入关字等于 key 的记录

分类

  • 二叉排序树
  • 平衡二叉树
  • 红黑树
  • B- 树
  • B+ 树
  • 键树
二叉排序树 (Binary Sort Tree)

又称为二叉搜索树、二叉查找树

二叉排序树定义

二叉排序树或是空树,或是满足如下性质的二叉树:

  1. 若其左子树非空,则左子树上所有结点的值均小于根结点的值;

  2. 若其右子树非空,则右子树上所有结点的值均大于等于根结点的值;

  3. 其左右子树本身又各是一棵二叉排序树

    在这里插入图片描述

二叉排序树的性质

中序遍历非空的二叉排序树所得到的数据元素序列是一个按关键字排列的递增有序序列。

如上图就是 3 12 24 37 45 53 61 78 90 100

二叉排序树查找

算法

在这里插入图片描述

typedef struct {KeyType key;  //关键字项infoType otherinfo;  //其他数据域
}ElemType;typedef stuct BSTNode {ElemType data;  //数据域struct BSTNode *lchild, *rchild;  //左右孩子指针
}BSTNode, *BSTree;BSTree T;  //定义二叉排序树T

在这里插入图片描述

BSTree SearchBST(BSTree T, KeyType key) {if (!T) || (key == T->data.key) return T; //表为空或者表不为空且找到了都返回一个指针T(BSTree类型)else if (key < T->data.key)   // 判断key在左右子树的位置return SearchBST(T->lchild, key); //继续在左子树上找else return SearchBST(T->rchild, key);  //继续在右子树上找
}//SearchBST

平均查找长度

在这里插入图片描述

二叉排序树上查找某关键字等于给定值的结点过程,其实就是走了一条从根到该结点的路径。

在这里插入图片描述

总结:含有 n 个结点的二叉排序树的平均查找长度和树的形态有关

在这里插入图片描述

二叉排序树的插入
  • 若二叉排序树为空,则插入结点作为根结点插入到空树中

  • 否则,继续在其左、右子树上查找

    • 树中已有,不再插入

    • 树中没有

      • 查找直至某个叶子结点的左子树或右子树为空为止,则插入结点应为该叶子结点的左孩子或右孩子
  • 插入的元素一定在叶结点

在这里插入图片描述

二叉排序树的生成
  • 从空树出发,经过一系列的查找、插入操作之后,可生成一棵二叉排序树。

  • 一个无序序列可通过构造二叉排序树而变成一个有序序列。构造树的过程就是对无序序列进行排序的过程。(插入的结点均为叶子结点,故无需移动其他结点)

  • 关键字的输入顺序不同,建立的不同二叉排序树。

    在这里插入图片描述

二叉排序树的删除

从二叉排序树中删除一个结点,不能把以该结点为根的子树都删掉,只能删掉该结点,并且还应保证删除后所得的二叉树仍然满足二叉排序树的性质不变。在二叉排序树中删去一个结点相当于删去有序序列中的一个结点。(中序遍历二叉树得到递增有序的序列)

  1. 被删除的结点是叶子结点:直接删去该结点。

  2. 被删除的结点只有左子树或者只有右子树,用其左子树或者右子树替换它(结点替换)。

    其双亲结点的相应指针域的值改为“指向被删除结点的左子树或者右子树”

    在这里插入图片描述

  3. 被删除的结点既有左子树,也有右子树

    以其中序前趋值替换之(值替换),然后再删除该前趋结点。前趋是左子树中最大的结点。

    也可以用其后继替换之,然后再除该后继结点。后继是右子树中最小的结点。

    在这里插入图片描述

  4. 总结图:

    在这里插入图片描述

平衡二叉树

平衡二叉树 (balanced binary tree)又称 AVL (Adelson VeIskii and Landis)

一棵平衡二叉树或者是空树,或者是具有下列性质的二叉排序树.

  • 左子树与右子树的高度之差的绝对值小于等于 1
  • 左子树和右子树也是平衡二叉排序树。

结点的平衡因子 (BF)

  • 给每个结点附加一个数字,给出该结点左子树右子树的高度差。值范围(-1, 0 ,1)

  • 平衡因子=结点左子树的高度-结点右子树的高度

  • 对于一棵有 n 个结点的 AVL 树,其高度保持在 O(log2n )数量级,ASL也保持在 O(log2n )量级

在这里插入图片描述

失衡二叉排序树的调整

四种类型

在这里插入图片描述

调整原则

  • 降低高度
  • 保持二叉排序树的性质

在这里插入图片描述

  1. LL型调整

    在这里插入图片描述

    在这里插入图片描述

  2. RR型

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

  3. LR型

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  4. RL型
    在这里插入图片描述
    在这里插入图片描述

构造案例

输入关键字序列(16,3,7,11,9,26,18,14,15), 给出构造AVL 树的步骤。

在这里插入图片描述

散列表的查找

基本思想:记录的存储位置与关键字之间存在对应关系

对应关系-- hash 函数 Loc(i)= H(keyi)

散列表术语

散列方法(杂凑法):

选取某个函数,依该函数按关键字计算元素的存储位置,并按此存放;查找时,由同一个函数对给定值 k 计算地址,将 k 与地址单元中元素关键码进行比,确定查找是否成功。

散列函数(杂凑函数):散列方法中使用的转换函数

散列表(杂凑表):按上述思想构造的表

散列存储:选取某个函数,依该函数按关键字计算元素的存储位置 Loc(i)=H(keyi)

冲突:不同的关键码映射到同一个散列地址,当key1 != key2 我们的 H(key1)=H(key2)

在这里插入图片描述

散列函数构造方法

在散列查找方法中,冲突是不可能避免的,只能尽可能减少。

构造散列函数考虑的因素:

  • 执行速度(即计算散列函数所需时间)
  • 关键字的长度;
  • 散列表的大小;
  • 关键字的分布情况;
  • 查找频率。

根据元素集合的特性构造

  • 要求一:n 个数据原仅占用 n 个地址。虽然散列查找是以空间换时间,但仍希望散列的地址空间尽量小。

  • 要求二:无论用什么方法存储,目的都是尽量均匀地存放元素,以避免冲突。

有以下方法

  • 直接定址法
  • 数字分析法
  • 平方取中法
  • 折叠法
  • 除留余数法(最常用)
  • 随机数法
直接定址法

Hash(key) = a*key + b (a 、b为常数)

优点:以关键码 key 的某个线性函数值为散列地址,不会产生冲突。

缺点:要占用连续地址空间,空间效率低。

在这里插入图片描述

除留余数法

Hash(key)= key mod p( p 是一个整数)

如何取p: 设表长为 m ,取 p <= m 且为质数

在这里插入图片描述

处理冲突的方法

方法:

  • 开放定址法(开地址法)
  • 链地址法(拉链法)
  • 再散列法(双散列函数法)
  • 建立一个公共溢出区
开放地址法

基本思想:有冲突时就去寻找下空的散列地址,只要散列表足够大,空的散列地址总能找到,并将数据元素存入。

例如:除留余数法Hi=(Hash(key)+di) mod m (di 为增量序列)

常用方法:线性探测法;二次探测法;伪随机法

在这里插入图片描述

线性探测法

在这里插入图片描述

例:关键码集为{47,7,29,11,16,92,22,8,3}, 散列表长为 m = 11 ;散列函数为 Hash(key)=key mod 11 ;拟用线性探测冲突。建散列表如下:

在这里插入图片描述

二次探测法

在这里插入图片描述

伪随机探测法:

在这里插入图片描述

链地址法

基本思想:相同散列地址的记录链成一单链表

m个散列地址就设 m个单链表,然后用一个数组将m个单链表的表头指针存储起来,形成一个动态的结构。

在这里插入图片描述

链地址法建立散列表步骤

Step1: 取数据元素的关键字 key ,计算其散列函数值(地址)。若该地址对应的链表为空,则将该元素插入此链表;否则执行 Step2 解决冲突。

Step2: 根据选择的冲突处理方法,计算关键字 key 的下一个存储地址。若该地址对应的链表为不为空,则利用链表的前插法后插法将该元素插入此链表。

优点

  • 非同义词不会冲突,无"聚集"现象

  • 链表上结点空间动态申请,更适合表长不确定的情况

散列表查找

在这里插入图片描述

例题:

已知一组关键字(19,14,23,1,68,20,84,27,55,11,10,79)散列函数为: H(key) = key MOD 13,散列表长为 m = 16 ,设每个记录的查找概率相等

在这里插入图片描述

在这里插入图片描述

使用平均查找长度 ASL 来衡量查找算法, ASL 取决于:

  • 散列函数

  • 处理冲突的方法

  • 散列表的装填因子α(α=表中填入记录数/哈希表的长度, α越大,表中记录数越多,说明表装得越满,发生冲突的可能性就越大,查找时比较次数就越多。)

    在这里插入图片描述

结论

  • 散列表技术具有很好的平均性能,优于一些传统的技术
  • 链地址法优于开地址法
  • 除留余数法作散列函数优于其它类型函数

TO BE CONTINUED…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/93024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实用调试技巧

引言&#xff1a;一个完美的代码离不开程序员的调试&#xff0c;所谓三分编写七分调试&#xff0c;今天我们给大家介绍几种实用的调试技巧。 1️⃣Bug的由来&#xff1a; 原意是指&#xff0c;小虫子&#xff0c;昆虫等&#xff0c;而人们也通常将电脑程序中的一些隐藏的缺陷或…

ThreeJS - 封装一个GLB模型展示组件(TypeScript)

一、引言 最近基于Three.JS&#xff0c;使用class封装了一个GLB模型展示&#xff0c;支持TypeScript、支持不同框架使用&#xff0c;具有多种功能。 &#xff08;下图展示一些基础的功能&#xff0c;可以自行扩展&#xff0c;比如光源等&#xff09; 二、主要代码 本模块依赖…

聊聊常见的IO模型 BIO/NIO/AIO 、DIO、多路复用等IO模型

聊聊常见的IO模型 BIO/NIO/AIO/DIO、IO多路复用等IO模型 文章目录 一、前言1. 什么是IO模型2. 为什么需要IO模型 二、常见的IO模型1. 同步阻塞IO&#xff08;Blocking IO&#xff0c;BIO&#xff09;2. 同步非阻塞IO&#xff08;Non-blocking IO&#xff0c;NIO&#xff09;3.…

C++--位图和布隆过滤器

1.什么是位图 所谓位图&#xff0c;就是用每一位来存放某种状态&#xff0c;适用于海量数据&#xff0c;数据无重复的场景。通常是用来判断某个数据存不存在的。比如int 有32位&#xff0c;就可以存放0到31这32个数字在不在某个文件中。当然&#xff0c;其他类型也可以。 2.位…

数据结构-哈希表

系列文章目录 1.集合-Collection-CSDN博客​​​​​​ 2.集合-List集合-CSDN博客 3.集合-ArrayList源码分析(面试)_喜欢吃animal milk的博客-CSDN博客 4.数据结构-哈希表_喜欢吃animal milk的博客-CSDN博客 文章目录 目录 系列文章目录 文章目录 前言 一 . 什么是哈希表&a…

Linux系统之部署Linux命令大全搜索工具

Linux系统之部署Linux命令大全搜索工具 一、linux-command介绍二、本次实践介绍2.1 本地环境规划2.2 本次实践介绍 三、安装httpd软件3.1 检查yum仓库3.2 安装httpd软件3.3 启动httpd服务3.4 查看httpd服务状态3.5 防火墙和selinux设置3.6 浏览器测试web服务 四、安装linux-com…

LabVIEW开发虚拟与现实融合的数字电子技术渐进式实验系统

LabVIEW开发虚拟与现实融合的数字电子技术渐进式实验系统 数字电子技术是所有电气专业的重要学科基础&#xff0c;具有很强的理论性和实践性。其实验是提高学生分析、设计和调试数字电路能力&#xff0c;培养学生解决实际问题的工程实践能力&#xff0c;激发学生创新意识&…

Echarts 教程一

Echarts 教程一 可视化大屏幕适配方案可视化大屏幕布局方案Echart 图表通用配置部分解决方案1. titile2. tooltip3. xAxis / yAxis 常用配置4. legend5. grid6. series7.color Echarts API 使用全局echarts对象echarts实例对象 可视化大屏幕适配方案 rem flexible.js 关于flex…

Elasticsearch:与多个 PDF 聊天 | LangChain Python 应用教程(免费 LLMs 和嵌入)

在本博客中&#xff0c;你将学习创建一个 LangChain 应用程序&#xff0c;以使用 ChatGPT API 和 Huggingface 语言模型与多个 PDF 文件聊天。 如上所示&#xff0c;我们在最最左边摄入 PDF 文件&#xff0c;并它们连成一起&#xff0c;并分为不同的 chunks。我们可以通过使用 …

DBA数据库运维-MySQL安装篇(glibc,源码)

1. MySQL数据库版本 版本说明社区版: MySQL Community Edition (GPL)1.可以看做是企业版的“广泛体验版(小白鼠版)"&#xff0c;未经各个专有系统平台的压力和性能测试 2.基于GPL协议发布&#xff0c;可以随意下载使用 3.没有任何官方技术支持服务企业版:MySQL Enterpris…

JUC中的设计模式

文章目录 1. 终止模式之两阶段终止模式 1. 终止模式之两阶段终止模式 需求&#xff1a;用一个线程每两秒检测***状态&#xff0c;当不想检测时&#xff0c;用另一个线程将其停止 在一个线程 T1 中如何“优雅”终止线程 T2&#xff1f;这里的【优雅】指的是给 T2 一个料理后事…

前端开发网站推荐

每个人都会遇见那么一个人&#xff0c;永远无法忘却&#xff0c;也永远不能拥有。 以下是一些可以用来查找和比较前端框架的推荐网站&#xff1a; JavaScript框架比较&#xff1a; 这些网站提供了对不同JavaScript框架和库的详细比较和评估。 JavaScripting: 提供了大量的JavaS…

防火墙基础之H3C防火墙分支与分支之间双向地址转换

分支与分支之间双向地址转换 原理概述&#xff1a; 防火墙&#xff08;英语&#xff1a;Firewall&#xff09;技术是通过有机结合各类用于安全管理​与筛选的软件和硬件​设备&#xff0c;帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障&#xff0c;以保护用户资…

凉鞋的 Godot 笔记 102. 场景与节点的增删改查

在上一篇&#xff0c;我们完成了 Godot 引擎的 Hello World 输出&#xff0c;并且完成了第一个基本循环: 通过这次基本循环的完成&#xff0c;我们获得了一点点的 Godot 使用经验&#xff0c;这非常重要。 有实践经验后再去补充理论 和 先学习理论后去实践相比&#xff0c;前者…

python-切换镜像源和使用PyCharm进行第三方开源包安装

文章目录 前言python-切换镜像源和使用PyCharm进行第三方开源包安装1. 切换镜像源2. 使用PyCharm进行第三方开源包安装 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每…

【Linux】线程概念

&#x1f525;&#x1f525; 欢迎来到小林的博客&#xff01;&#xff01;       &#x1f6f0;️博客主页&#xff1a;✈️林 子       &#x1f6f0;️博客专栏&#xff1a;✈️ Linux       &#x1f6f0;️社区 :✈️ 进步学堂       &#x1f6f0…

常见加密和解密方法介绍。

介绍常见的加密和解密方法。 加密是利用数学方法将明文转化为密文&#xff0c;从而达到保护数据的目的。 通过加密可保证数据的机密性、完整性、鉴别性。 机密性&#xff1a;通过数据加密实现。只允许特定用户访问和阅读信息。 完整性&#xff1a;通过数字加密、散列、数字签名…

《Vue.js+Spring Boot全栈开发实战》简介

大家好&#xff0c;我是老卫。 恰逢中秋国庆双节&#xff0c;不想出门看人山&#xff0c;惟愿宅家阅书海&#xff01; 今天开箱的这本书是《Vue.jsSpring Boot全栈开发实战》。 外观 从书名故名思议&#xff0c;就是基于Vue.jsSpring Boot来实现企业级应用全栈开发。 该书由…

LabVIEW工业虚拟仪器的标准化实施

LabVIEW工业虚拟仪器的标准化实施 创建计算机化的测试和测量系统&#xff0c;从计算机桌面控制外部测量硬件设备&#xff0c;以及在计算机屏幕上显示的类似仪器的面板上查看来自外部设备的测试或测量数据&#xff0c;所有这些都需要虚拟仪器系统软件。该软件允许用户执行所有这…

Axios post请求出现500错误

笔者在编写前端form表单传后端数据的时候&#xff0c;出现了以下问题 一、问题场景 当我用axios发送post请求的时候&#xff0c;出现了500错误 笔者找了很长时间错误&#xff0c;代码没问题&#xff0c;后端接口也没问题&#xff0c;后来发现问题出在实体类上了 当前端post请…