【数据结构】数组(稀疏矩阵、特殊矩阵压缩、矩阵存储、稀疏矩阵的快速转置、十字链表)

稀疏矩阵、矩阵压缩、稀疏矩阵的快速转置、十字链表

目录

  • 稀疏矩阵、矩阵压缩、稀疏矩阵的快速转置、十字链表
    • 1.数组
    • 2.数组的顺序表示和实现
    • 3.特殊矩阵的压缩存储
      • (1). 上三角矩阵—列为主序压缩存储
      • (2). 下三角矩阵—**行为主序压缩存储**
      • (3). 对称矩阵
      • (4). 对角矩阵
    • 4. 稀疏矩阵
    • 5. 稀疏矩阵的压缩
      • (1). 三元组顺序表
      • (2). 行逻辑联接的顺序表
      • (3). 十字链表
    • 6. 稀疏矩阵的转置(普通转置 和 快速转置)
      • 方法一(普通转置)复杂度为O(T.mu×T.nu)
      • 方法二:快速转置 复杂度O(S.nu+S.tu)

前几期期链接:

  1. 【数据结构】栈与队列的概念和基本操作代码实现
  2. 【数据结构】树与二叉树的概念与基本操作代码实现

1.数组

k维数组的定义:
k 维数组 D = { a j 1 , j 2 , . . . , j k } k维数组D=\{ a_{j_1, j_2, ..., j_k} \} k维数组D{aj1,j2,...,jk}
k > 0 称为数组的维数, b i 是数组第 i 维的长度, j i 是数组元素第 i 维的下标 k>0称为数组的维数,b_i是数组第i维的长度,j_i是数组元素第 i维的下标 k>0称为数组的维数,bi是数组第i维的长度,ji是数组元素第i维的下标
a j 1 , j 2 , . . . , j k 属于 E l e m S e t ( 元素的性质相同 ) , Y i = 0 , . . . , b i − 1 ( i = 1 , 2 , … , k ) a_{j_1, j_2, ..., j_k}属于ElemSet(元素的性质相同),Y_{i}=0, ..., b_i -1 ( i=1, 2, …, k) aj1,j2,...,jk属于ElemSet(元素的性质相同)Yi=0,...,bi1(i=1,2,,k)

  1. 数组可以看作是一种特殊的线性表,即线性表数据元素本身又是一个线性表
    在这里插入图片描述

  2. 数组特点
    数组结构固定每一维的大小不可变
    数据元素同构(元素性质相同)

  3. 数组运算
    给定一组下标,存取、修改相应的数据元素,一般不做插入、删除操作。

2.数组的顺序表示和实现

二维数组有两种顺序映象的方式

  1. 以行序为主序:从数组的第一行开始依次存放每一行的数组元素;存放第i行时,从第一列开始顺次存放
    特点:有地址计算公式,可以随机访问
    二维数组任意元素的存储地址:
    L o c ( a i j ) = L o c ( a 11 ) + [ ( i − 1 ) n + ( j − 1 ) ] ∗ L Loc( a_{ij})=Loc(a_{11})+[(i-1)n+(j-1)]*L Loc(aij)=Loc(a11)+[(i1)n+(j1)]L
    L o c ( a 11 ) 称为基地址或基址 Loc(a_{11})称为基地址或基址 Loc(a11)称为基地址或基址
    在这里插入图片描述

  2. 以列序为主序:
    二维数组任意元素的存储地址:
    L o c ( a i j ) = L o c ( a 11 ) + [ ( j − 1 ) m + ( i − 1 ) ] ∗ L Loc( a_{ij})=Loc(a_{11})+[(j-1)m+(i-1)]*L Loc(aij)=Loc(a11)+[(j1)m+(i1)]L
    L o c ( a 11 ) 称为基地址或基址 Loc(a_{11})称为基地址或基址 Loc(a11)称为基地址或基址

可将二维数组的行为主序和列为主序的存储方式推广到一般情况,可得到 n 维数组数据元素存储位置的映象关系

3.特殊矩阵的压缩存储

宗旨:为值相同的矩阵元素只分配一个空间,对零元不分配存储空间.

(1) 特殊矩阵:非零元在矩阵中的分布有一定规则

  1. 上(下)三角矩阵
  2. 对称矩阵
  3. 对角矩阵

(2.)稀疏阵:零元多,分布无规律

(1). 上三角矩阵—列为主序压缩存储

在这里插入图片描述

存储方式:列为主序压缩存储和行为主序压缩存储,存储空间是一维的,将二维数组以一维方式存储。
特点:均可以随机访问数组元素。

上三角矩阵—列为主序压缩存储–数组sa[M]

(1)下三角为0时:
i≤j时,aij为非0元,存放地址Loc(aij)的计算公式:
L o c ( a i j ) = L o c ( a 11 ) + ( ( j − 1 ) ⋅ j 2 + i − 1 ) ⋅ L , ( c o n d i t i o n : i ≤ j ) Loc(a_{ij})= Loc(a_{11})+(\frac{(j-1)\cdot j}{2}+i-1)\cdot L , (condition:i≤j ) Loc(aij)=Loc(a11)+(2(j1)j+i1)L,(condition:ij)

一维存储空间用一维数组sa[M]表示, Loc(aij)计算公式(a11存于sa[0],地址为0 ):
L o c ( a i j ) = 0 + ( ( j − 1 ) ⋅ j 2 + i − 1 ) ⋅ 1 , ( c o n d i t i o n : i ≤ j ) Loc(a_{ij})= 0+(\frac{(j-1)\cdot j}{2}+i-1)\cdot 1, (condition:i≤j ) Loc(aij)=0+(2(j1)j+i1)1,(condition:ij)
数组sa的大小: M = ( n + 1 ) ⋅ n 2 M=\frac{(n+1)\cdot n}{2} M=2(n+1)n
在这里插入图片描述

aij(i≤j)存于下标为k的一维数组元素中:
L o c ( a i j ) = k = ( j − 1 ) ⋅ j 2 + i − 1 Loc(aij)=k=\frac{(j-1)\cdot j}{2}+i-1 Loc(aij)=k=2(j1)j+i1

(2)下三角为常数时
常数的存放的位置为: ( n + 1 ) ⋅ n 2 \frac{(n+1)\cdot n}{2} 2(n+1)n
数组sa的大小: M = ( n + 1 ) ⋅ n 2 + 1 M=\frac{(n+1)\cdot n}{2}+1 M=2(n+1)n+1
在这里插入图片描述

(2). 下三角矩阵—行为主序压缩存储

在这里插入图片描述

存储方式:列为主序压缩存储和行为主序压缩存储,存储空间是一维的,将二维数组以一维方式存储。
行为主序压缩存储:从第一行开始依次存放每一行的“非0(C)元”

特点:均可以随机访问数组元素。

下三角矩阵—行为主序压缩存储–数组sa[M]

(1)上三角为0时:
j≤i时,aij为非0元,存放地址Loc(aij)的计算公式:
L o c ( a i j ) = L o c ( a 11 ) + ( ( i − 1 ) ⋅ i 2 + j − 1 ) ⋅ L , ( c o n d i t i o n : j ≤ i ) Loc(a_{ij})= Loc(a_{11})+(\frac{(i-1)\cdot i}{2}+j-1)\cdot L , (condition:j≤i ) Loc(aij)=Loc(a11)+(2(i1)i+j1)L,(condition:ji)

一维存储空间用一维数组sa[M]表示, Loc(aij)计算公式(a11存于sa[0],地址为0 ):
L o c ( a i j ) = 0 + ( ( i − 1 ) ⋅ i 2 + j − 1 ) ⋅ 1 , ( c o n d i t i o n : j ≤ i ) Loc(a_{ij})= 0+(\frac{(i-1)\cdot i}{2}+j-1)\cdot 1, (condition:j≤i ) Loc(aij)=0+(2(i1)i+j1)1,(condition:ji)
数组sa的大小: M = ( n + 1 ) ⋅ n 2 M=\frac{(n+1)\cdot n}{2} M=2(n+1)n
在这里插入图片描述

aij(i≤j)存于下标为k的一维数组元素中:
L o c ( a i j ) = k = ( i − 1 ) ⋅ i 2 + j − 1 Loc(aij)=k=\frac{(i-1)\cdot i}{2}+j-1 Loc(aij)=k=2(i1)i+j1

上三角为常数时
常数的存放的位置为: ( n + 1 ) ⋅ n 2 \frac{(n+1)\cdot n}{2} 2(n+1)n
数组sa的大小: M = ( n + 1 ) ⋅ n 2 + 1 M=\frac{(n+1)\cdot n}{2}+1 M=2(n+1)n+1
在这里插入图片描述

(3). 对称矩阵

存放方式:只存上三角阵或只存下三角阵都可以
在这里插入图片描述

地址计算公式 : 参考上三角和下三角矩阵的地址计算公式

(4). 对角矩阵

对角矩阵 –2d+1对角阵主对角线和主对角线上面d条对角线、主对角线下面d条对角线上的数据元素分布不规律,非0(C).
在这里插入图片描述

2d+1 对角阵特点:**第一行和最后一行每行有d+1个数据元素**,余下每行**最多**2d+1个数据元素

压缩存储方法:第一行和最后一行每行存 d+1 个数据元素,余下每行存 2d+1 个数据元素
在这里插入图片描述

2d+1-对角阵行为主序压缩存储地址计算公式:
矩阵元素下标从0开始的地址计算公式:
L o c ( a i j ) = L o c ( a 00 ) + ( 2 d + 1 ) ∗ i − d + j − ( i − d ) = L o c ( a 00 ) + ( 2 d + 1 ) ∗ i + j − i Loc(a_{ij})=Loc(a_{00})+(2d+1)*i-d+j-(i-d) =Loc(a_{00})+(2d+1)*i+j-i Loc(aij)=Loc(a00)+(2d+1)id+j(id)=Loc(a00)+(2d+1)i+ji
0 ≤ i , j < n , ∣ i − j ∣ ≤ d 0≤i,j<n, |i-j|≤d 0i,j<n,ijd

§矩阵元素下标从1开始的地址计算公式:
L o c ( a i j ) = L o c ( a 11 ) + ( 2 d + 1 ) ∗ ( i − 1 ) − d + j − i + d = L o c ( a 11 ) + ( 2 d + 1 ) ∗ ( i − 1 ) + j − i Loc(a_{ij})=Loc(a_{11})+(2d+1)*(i-1)-d+j-i+d= Loc(a_{11})+(2d+1)*(i-1)+j-i Loc(aij)=Loc(a11)+(2d+1)(i1)d+ji+d=Loc(a11)+(2d+1)(i1)+ji
1 ≤ i , j ≤ n , ∣ i − j ∣ ≤ d 1≤i,j≤n, |i-j|≤d 1i,jn,ijd

4. 稀疏矩阵

稀疏矩阵: 矩阵元素零元多,在矩阵中随机出现
假设 m行 n列的矩阵含 t个非零元素,则稀疏因子: δ = t m ⋅ n δ =\frac{t}{m\cdot n} δ=mnt
通常认为 δ ≤ 0.05 的矩阵为稀疏矩阵。

压缩存储原则:只存储每个非零元的行、列下标及其值和矩阵的行列维数

在这里插入图片描述

常规存储方法缺点:

(1) 零值元素占了很大空间;
(2) 计算中进行了很多和零值的运算,遇除法,还需判别除数是否为零。

解决问题的原则:

(1) 尽可能少存或不存零值元素;
(2) 尽可能减少没有实际意义的运算;
(3) 操作方便。 即:尽可能快地找到与下标值(i,j)对应的元素,尽可能快地找到同一行或同一列的非零值元。

5. 稀疏矩阵的压缩

稀疏矩阵的压缩存储方法:

1. 三元组顺序表
2. 行逻辑联接的顺序表
3. 十字链表

(1). 三元组顺序表

三元表结构:
在这里插入图片描述

//三元表结构:
typedef struct{  
    int i, j;       //非零元的行、列下标 
    int e;   //非零元的值
} Triple;

//稀疏矩阵的结构
#define MAXSIZE 100  //非零元最大个数
typedef struct{  
    Triple data[MAXSIZE + 1];       //三元组表,data[0]未用
    int mu, nu, tu; //矩阵行、列数、非零元个数
} TSMatrix;

特点:
有序的双下标法行序有序存储
便于进行依行顺序处理的矩阵运算
若需存取某一行中的非零元,需**从头开始查找**。

压缩存储后,元素aij的存储位置与其下标无关,而取决于之前的非零元个数
非零元以行为主序顺序存放

(2). 行逻辑联接的顺序表


#define MAXRC 500 
//行逻辑联接的顺序表
typedef struct {
    Triple data[MAXSIZE + 1];
    int  rpos[MAXRC + 1]; // 每一行非0元存放的起始位置
    int  mu, nu, tu;
} RLSMatrix; // 行逻辑链接顺序表类型

在这里插入图片描述

(3). 十字链表

用三元组表存储稀疏矩阵,在单纯的存储和做类似转置之类的运算时可以节约存储空间,且运算速度较快;
但当进行矩阵相加等运算时,稀疏矩阵的非零元位置和个数都会发生变化。使用三元组表必然会引起数组元素的大量移动

  1. 采用链表存放稀疏矩阵的非0元
  2. 将稀疏矩阵每行的非0元按照列升序的顺序放在一个单链表中
  3. 将稀疏矩阵每列的非0元按照行升序的顺序放在一个单链表中

即:
稀疏矩阵的每个非0元即位于一个行单链表,也同时位于一个列单链表
用一维数组保存每行非0元的单链表的头指针
用一维数组保存每列非0元的单链表的头指针

十字链表 :每个非零元用含有五个域的结点表示(非零元的所在行、列、值,及同行、同列的下一个非零元)
在这里插入图片描述

//十字链表
typedef struct OLNode{ 

    int row, col; //非零元所在行、列
    int val; //非零元的值
    struct OLNode*right, *down;//同行、同列的下一个非零元
}OLNode,* OLink;

typedef struct{ 
    OLink rhead[M],chead[N]; //行、列指针数组
    int mu, nu, tu; //行、列数及非零元个数
}CrossList;

6. 稀疏矩阵的转置(普通转置 和 快速转置)

解决思路:

  1. 将矩阵行、列维数互换,非零元个数不变
  2. 将每个三元组中的i和j相互调换,非零元值不变
  3. 重排次序,使T.data中元素以T的行(M的列)为主序
    在这里插入图片描述

方法一(普通转置)复杂度为O(T.mu×T.nu)

按矩阵T中三元组表T.data的次序依次在矩阵M的三元组表M.data中找到相应三元组进行转置
为找到M.data中第i列所有非零元素,需对M.data扫描一遍
由于M.data以M行序为主序,所以得到的恰是T.data中应有的顺序

//复杂度为O(T.mu×T.nu)
Status TransposeSMatrix(TSMatrix M, TSMatrix &T){ 
    int col, p, k;
    T.mu=M.nu;  
    T.nu=M.mu; 
    T.tu=M.tu; 
    if(T.tu){ //有非零元,转置
        k=1;//k为T.data表下标
        for(col=1;col<=M.nu;col++)//查找M每一列的非零元
            for( p=1;p<=M.tu;p++)//扫描M的所有非零元
                if( M.data[p].j==col ){ 
                    T.data[k].i=M.data[p].j;
                    T.data[k].j=M.data[p].i;
                    T.data[k].e=M.data[p].e; 
                    k++;
                }
        return OK;
    }
    return ERROR;
}

//T(n)=O(M.nu×M.tu)
//若M.tu与M.mu×M.nu同数量级则 T(n)=O(M.mu×M.nu^2)

方法二:快速转置 复杂度O(S.nu+S.tu)

//复杂度O(S.nu+S.tu) 
//若S.tu与S.mu×S.nu同数量级则 T(n)=O(S.mu×S.nu)
void TransPose_F(TSMatrix S,TSMatrix &Transpose_S){
    //S为原来矩阵
    //Transpose_S为转置后矩阵
    Transpose_S.mu=S.nu;
    Transpose_S.nu=S.mu;
    Transpose_S.tu=S.tu;
    if(S.tu){
        //判断是否为空
        int col;//列
        int num[MAXSIZE]={0};// 记录原三元组中列号为 col 的项的数目。 辅助数组
        int cpot[MAXSIZE]={0};// 记录原三元组中列号为 col 的项在新三元组中的首位置。 辅助数组
        
        //扫描第一次 记录元素矩阵S中列数为j的个数
        for(int i=1;i<=S.tu;i++){
            //记录元素矩阵S中列数为j的个数
            num[S.data[i].j]++;
        }

        cpot[1]=1;//初始化第一个元素的地址

        //扫描第二次 记录原三元组中列号为 col 的项在新三元组中的首位置
        for(col=2;col<=S.nu;col++){
            //列号为 col 的项在新三元组中的首位置
            cpot[col]=cpot[col-1]+num[col-1];
        }

        //扫描第三次 转置
        for(int t=1;t<=S.tu;t++){
            col=S.data[t].j;//列数
            int s=cpot[col];//地址  下标

            Transpose_S.data[s].e=S.data[t].e;
            Transpose_S.data[s].i=S.data[t].j;
            Transpose_S.data[s].j=S.data[t].i;

            cpot[col]++;//下标 后移
        }
    }
}

感谢阅读!
前几期期链接:

  1. 【数据结构】栈与队列的概念和基本操作代码实现
  2. 【数据结构】树与二叉树的概念与基本操作代码实现

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uni-app项目创建方式

原生小程序与uni-app的区别 创建uni-app的方式 1.通过HBuilderX创建 2.通过命令行创建 vue3ts版&#xff1a;npx degit dcloudio/uni-preset-vue#vite-ts 项目名称 用vscode开发uni-app项目 安装命令&#xff1a;npm i -D types/wechat-miniprogram uni-helper/uni-app-typ…

HarmonyOS 应用开发-边缓存边播放案例

介绍 OhosVideoCache是一个支持边播放边缓存的库&#xff0c;只需要将音视频的url传递给OhosVideoCache处理之后再设置给播放器&#xff0c; OhosVideoCache就可以一边下载音视频数据并保存在本地&#xff0c;一边读取本地缓存返回给播放器&#xff0c;使用者无需进行其他操作…

【爬虫+数据清洗+可视化】用Python开发舆情分析文本挖掘“淄博烧烤“可视化大屏

先上效果截图&#xff1a; 动态演示效果&#xff1a; 【大屏演示】Python可视化舆情大屏「淄博烧烤」 主要用到的技术栈&#xff1a; requests 爬虫发送请求json 解析返回数据re 正则表达式清洗文本pandas保存csv文件sqlalchemy 保存MySQL数据pyecharts 可视化开发snownlp 情感…

17 - 微程序控制

---- 整理自B站UP主 踌躇月光 的视频 1. 实验目标 将 RAM 中 0 地址内容和 1 地址内容相加&#xff0c;结果存入 2 地址。 需要从 RAM 读取数据 需要寄存器暂存数据 需要从 ROM 中读取控制程序 3 4 > 7 2. 实验过程 【17 - 微程序控制】 2.1 改造 ALU 2.2 程序计数…

成都欣丰洪泰文化传媒有限公司电商服务的新锐力量

在当今电商行业风起云涌的时代&#xff0c;成都欣丰洪泰文化传媒有限公司以其独特的视角和专业的服务&#xff0c;成为了业内的佼佼者。该公司专注于电商服务&#xff0c;致力于为广大商家提供全方位、多层次的解决方案&#xff0c;助力商家在激烈的市场竞争中脱颖而出。 一、…

位置编码学习

基本概念 关于位置编码的一切&#xff1a;https://kexue.fm/archives/8130#T5%E5%BC%8F 残差连接 Post Norm 关注深度 残差的意思是给前面的层搞一条“绿色通道”&#xff0c;让梯度可以更直接地回传&#xff0c;但是在Post Norm中&#xff0c;这条“绿色通道”被严重削弱…

今日arXiv最热大模型论文:人民大学发布,拯救打工人!Office真实场景下的大模型表格处理

引言&#xff1a;大语言模型事实召回机制探索 该论文深入研究了基于Transformer的语言模型在零射击和少射击场景下的事实记忆任务机制。模型通过任务特定的注意力头部从语境中提取主题实体&#xff0c;并通过多层感知机回忆所需答案。作者提出了一种新的分析方法&#xff0c;可…

牛客 2024春招冲刺题单 ONT82 腐烂的苹果【中等 BFS Java,Go】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/54ab9865ce7a45968b126d6968a77f34 思路 广度优先搜索。首先找到2坐标集合&#xff0c;然后每次往四周为1的坐标扩展参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数…

RAG基础知识及应用

简单介绍下RAG的基础知识和RAG开源应用 “茴香豆" 一. RAG 基础知识 1. RAG工作原理 RAG是将向量数据库和大模型问答能力的有效结合&#xff0c;从而达到让大模型的知识能力增加的目的。首先将知识源存储在向量数据库中&#xff0c;当提出问题时&#xff0c;去向量数据库…

客户案例丨拓数派向量计算引擎PieCloudVector助力东吴证券AIGC应用升级

1.项目背景 随着人工智能技术的不断创新和应用&#xff0c;我们可以看到人工智能在各个领域的应用越来越广泛。深度学习技术在图像识别、语音识别、自然语言处理等领域表现出色。机器学习算法的改进将解决更多实际问题&#xff0c;如增强学习、迁移学习和联合学习等&#xff…

学生用什么品牌的台灯好,学生护眼台灯推荐品牌

在童年的岁月里&#xff0c;我们常常无知于如何正确地使用眼睛&#xff0c;对于何种光线最有益眼睛健康也缺乏了解。这些年轻时的疏忽&#xff0c;如今在我的眼镜度数上得到了反映&#xff0c;近视已接近千度&#xff0c;这是许多同样经历的视友都能共鸣的体验。随着时间的推移…

MoonBit 最新动态:MoonBit 引入实验性的测试覆盖率统计工具

MoonBit更新 支持 array.iter intrinsic 并且已经对标准库中的函数进行标注&#xff0c;从而可以在特定情况下将循环进行内联&#xff0c;以提升运行效率 /// intrinsic %array.iter pub fn iter[T](self : Array[T], f : (T) -> Unit) -> Unit {for i 0; i < self…

pymilvus创建IVF_FLAT向量索引

索引简介 索引的作用是加速大型数据集上的查询。 目前&#xff0c;向量字段仅支持一种索引类型&#xff0c;即只能创建一个索引。 milvus支持的向量索引类型大部分使用近似最近邻搜索算法(ANNS,approximate nearest neighbors search) 。ANNS 的核心思想不再局限于返回最准确…

棋牌室计时吧台计费收费灯控管理系统软件操作流程

棋牌室计时吧台计费收费灯控管理系统软件操作流程 一、前言 以下软件操作教程以&#xff0c;佳易王棋牌桌球计时计费管理系统软件灯控版V17.87为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 该计时计费软件可以是棋牌和桌球混合同时计时计费 …

uniapp:Hbuilder没有检测到设备请插入设备或启动模拟器的问题解决

问题 使用模拟器调试运行项目时&#xff0c;出现以下提示&#xff0c;“没有检测到设备&#xff0c;请插入设备或启动模拟器后点击刷新再试”。排查了一天最终找到原因。 解决 已确认模拟器是已经正常启动&#xff0c;并且Hbuilder设置中的adb路径和端口都配置没有问题&#…

123124

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

如何挂载img镜像以及lvm分区

上一章节&#xff0c;我在win10下利用qemu安装了一个aarch64的 kylin-server-v10的ISO系统镜像包。安装时将系统安装到了虚拟硬盘kylin-server-v10.img 里&#xff0c;现在有个需求&#xff0c;要读出kylin-server-v10.img中文件系统的内容。 通过fdisk命令可以看到 kylin-ser…

element-ui drawer 组件源码分享

今日简单分享 drawer 组件的源码实现&#xff0c;从以下五个方面来分享&#xff1a; 1、drawer 组件页面结构 2、drawer 组件属性 3、drawer 组件 slot 4、drawer 组件方法 5、drawer 组件事件 一、drawer 组件页面结构 二、drawer 组件属性 2.1 append-to-body 属性&am…

vulhub之fastjson篇-1.2.27-rce

一、启动环境 虚拟机:kali靶机:192.168.125.130/172.19.0.1(docker地址:172.19.0.2) 虚拟机:kali攻击机:192.168.125.130/172.19.0.1 本地MAC:172.XX.XX.XX 启动 fastjson 反序列化导致任意命令执行漏洞 环境 1.进入 vulhub 的 Fastjson 1.2.47 路径 cd /../../vulhub/fa…

vue前端项目到后端执行逻辑——自己改的话要怎么改

文章目录 vue前端项目到后端流程——自己改的话要怎么改 vue前端项目到后端流程——自己改的话要怎么改