数据结构进阶(二)矩阵(稀疏矩阵)的压缩存储_稀疏矩阵压缩

1)三元组表示法

三元组表示法就是在存储非零元的同时,存储该元素所对应的行下标和列下标。稀疏矩阵中的每一个非零元素由一个三元组(i,j,aij)唯一确定。矩阵中所有非零元素存放在由三元组组成的数组中。

在此,data域中表示非零元的三元组是以行序为主序顺序排列的。

以下看如何利用三元组表示法来实现矩阵的转置。

(1)按照b.data中三元组的次序依次在a.data中找出相应的三元组进行转置。换句话说,按照矩阵M的列序进行转置。为了找到M的每一列中所有的非零元素,需要对其三元组表a.data从第一行起整个扫描一遍。由于a.data是以M的行序为存放每个非零元的,由此得到的恰好是b.data应有的顺序。

三、存储结构及C语言描述

1、三元组表示法

(1)按照b矩阵中的行次序依次在a.data中找到相应的三元组进行转置。

(2)快速转置:按照a.data中三元组的次序进行转置,并将转置后的三元组放到b.data中的恰当位置。

恰当位置的确定:首先计算M矩阵的每一列(即T的每一行)中非0元的个数,然后求得M矩阵每一列第一个非0元在b.data中的位置。

算法基本思想:

设置两个向量:

num[col]:第col列的非零元素个数。

cpot[col]:第col列第一个非零元在b.data中的恰当位置。

在转置过程中,指示该列下一个非零元在b.data中的位置。

1、num[col]的计算:

顺序扫描a.data三元组,累计各列非0元个数。

2、cpot[col]计算:

四、算法的C语言实现

#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 12500
#define OK 1
typedef int ElemType;
typedef struct
{
int i,j;
ElemType e;
}Triple;
typedef struct
{
Triple data[MAXSIZE+1];
int mu,nu,tu;   //矩阵行数,列数和非0元个数
}TSMatrix;
int cpot[MAXSIZE+1],num[MAXSIZE+1];
int TransposeSMatrix(TSMatrix M,TSMatrix &T)
{
T.mu=M.nu;
T.nu=M.mu;
T.tu=M.tu;
if(T.tu)
  {
   int q=1;
   for(int col=1;col<=M.nu;++col)
          for(int p=1;p<=M.tu;++p)
                 if(M.data[p].j==col)
                 {
                 T.data[q].i=M.data[p].j;
                 T.data[q].j=M.data[p].i;
                 T.data[q].e=M.data[p].e;
                 ++q;
                 }//if
  }//if
return OK;
}//TransposeSMatrix
int InPutM(TSMatrix &M)
{
printf("input nu mu tu(With a space interval)of a Matrix:\n");
scanf("%d %d %d",&M.nu,&M.mu,&M.tu);  //row,colume,and tu
printf("Please input the data of Matrix:\n");
for(int c=1;c<=M.tu;c++)
   {
    scanf("%d",&M.data[c].i);
       scanf("%d",&M.data[c].j);
       scanf("%d",&M.data[c].e);
   }//for
return 1;
}//InPut
int PrintM(TSMatrix T)
{
printf("Matrix after transpose is:\n");
for(int c=1;c<=T.tu;c++)
   {
    printf("%d %d %d\n",T.data[c].i,T.data[c].j,T.data[c].e);
   }//for
return 1;
}//InPut
int FastTransposeSMatrix(TSMatrix M,TSMatrix &T)
{
T.mu=M.nu;
T.nu=M.mu;
T.tu=M.tu;
if(T.tu)
  {
  for(int col=1;col<=M.mu;++col) num[col]=0;
  for(int t=1;t<=M.tu;++t) ++num[M.data[t].j]; //记述M.data[t].j列
                                          //非0元的个数
  cpot[1]=1;
  //求第col列中第一个非零元在b.data(T)中的序号
  for(int col=2;col<=M.mu;++col)
         cpot[col]=cpot[col-1]+num[col-1];
  for(int p=1;p<=M.tu;++p)
         {
            int col=M.data[p].j;
          int q=cpot[col];
         T.data[q].i=M.data[p].j;
         T.data[q].j=M.data[p].i;
         T.data[q].e=M.data[p].e;
         ++cpot[col];
      }//for
  }//if
return OK;
## Vue 面试题

1.Vue 双向绑定原理
2.描述下 vue 从初始化页面–修改数据–刷新页面 UI 的过程?
3.你是如何理解 Vue 的响应式系统的?
4.虚拟 DOM 实现原理
5.既然 Vue 通过数据劫持可以精准探测数据变化,为什么还需要虚拟 DOM 进行 diff 检测差异?
6.Vue 中 key 值的作用?
7.Vue 的生命周期
8.Vue 组件间通信有哪些方式?
9.watch、methods 和 computed 的区别?
10.vue 中怎么重置 data?
11.组件中写 name 选项有什么作用?
12.vue-router 有哪些钩子函数?
13.route 和 router 的区别是什么?
14.说一下 Vue 和 React 的认识,做一个简单的对比
15.Vue 的 nextTick 的原理是什么?
16.Vuex 有哪几种属性?
17.vue 首屏加载优化
18.Vue 3.0 有没有过了解?
19.vue-cli 替我们做了哪些工作?
…
![](https://img-blog.csdnimg.cn/img_convert/8b77cfc786aa6e8bb04f275816a13ae9.webp?x-oss-process=image/format,png)

## 算法

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/topics/618166371)**

1. 冒泡排序
2. 选择排序
3. 快速排序
4. 二叉树查找: 最大值、最小值、固定值
5. 二叉树遍历
6. 二叉树的最大深度
7. 给予链表中的任一节点,把它删除掉
8. 链表倒叙
9. 如何判断一个单链表有环
10. 给定一个有序数组,找出两个数相加为一个目标数
    ...
    ![](https://img-blog.csdnimg.cn/img_convert/be20627a9cfe00a29fbb38a772d2a904.webp?x-oss-process=image/format,png)

>由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!有需要的程序猿(媛)可以帮忙点赞+评论666

 链表倒叙
9. 如何判断一个单链表有环
10. 给定一个有序数组,找出两个数相加为一个目标数
    ...
    [外链图片转存中...(img-jTsTyCSM-1714721942524)]

>由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!有需要的程序猿(媛)可以帮忙点赞+评论666

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值