稀疏矩阵转置(C语言)

2023-11-13

最近有数据结构实验课了,还得学一学数据结构喽,以后就把学习经过贴上来了。

稀疏矩阵

当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组

稀疏数组的处理方法

1)记录数组一共有几行几列,有多少个不同的值(假设有sum个,则稀疏矩阵有sum+1行,3列)
2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
百度盗图
百度盗图(手动滑稽)

稀疏矩阵转置

题目
在这里插入图片描述
(不得不说这个题输入数据的确坑。。)
有两种方法转置
话不多说,上代码:

#include<stdio.h>
#include<stdlib.h>

#define MAXSIZE 1000
typedef struct{
int row;//第几行
int col;//第几列
int e;//存储的值
}Triple;

typedef struct
{
    Triple data[MAXSIZE];
    int m,n,len;//稀疏矩阵的行,列,非零元素的个数
}TSMatrix;


void createTSMatrix(TSMatrix *A)//创建矩阵
{    int i=1;     //data【0】未用
    scanf("%d %d",&A->m,&A->n);
    int flag = 1;
    int a,b,c;
    char c1,c2;
    while(flag)
    {
        scanf("%d",&a);
        c1 = getchar();
         scanf("%d",&b);
         c2 = getchar();
          scanf("%d",&c);
          if(c1=='?'&&c2=='?')
            break;
          A->data[i].row=a;
          A->data[i].col=b;
          A->data[i].e=c;
          i++;

    }
    i--;
    A->len=i;
}

void TransMatrix(TSMatrix A,TSMatrix *B)//序列递增转置法
{
    int i,j,k;
    B->n=A.m;
    B->m=A.n;
    B->len=A.len;
    if(B->len)
    {
        j=1;//辅助计数器,记录转置后的三元组元素下标值
        for(k=1;k<=A.n;k++)//扫描矩阵A的列次或B的行次

            for(i=1;i<=A.len;i++)  //扫描A找列为k的元素
        {
            if(A.data[i].col==k)
            {
                B->data[j].row=A.data[i].col;
                B->data[j].col=A.data[i].row;
                B->data[j].e=A.data[i].e;
                j++;
            }
        }
    }
}

void FastTransMatrix(TSMatrix A,TSMatrix *B)//快速转置法
{
    int col,t,p,q;
    int num[MAXSIZE],position[MAXSIZE];
    B->n=A.m;
    B->m=A.n;
    B->len=A.len;
    if(B->len)
    {
        for(col=1;col<=A.n;col++)
            num[col]=0;
        for(t=1;t<=A.len;t++)
            num[A.data[t].col]++;
        position[1]=1;
        for(col=2;col<=A.n;col++)
        {
            position[col]=position[col-1]+num[col-1];
        }
        for(p=1;p<=A.len;p++)
        {
            col=A.data[p].col;
            q=position[col];
            B->data[q].row=A.data[p].col;
            B->data[q].col=A.data[p].row;
            B->data[q].e=A.data[p].e;
            position[col]++;
        }
    }
}

void printMatrix(TSMatrix *B)//输出矩阵
{
    for(int i=1;i<=B->len;i++)
    {
        printf("%d %d %d\n",B->data[i].row,B->data[i].col,B->data[i].e);
    }
}

int main()
{
    TSMatrix A,B;//A为初始矩阵,B为转置后的矩阵
    createTSMatrix(&A);
    FastTransMatrix(A,&B);
    printMatrix(&B);
    return 0;
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

稀疏矩阵转置(C语言) 的相关文章

随机推荐

  • 使用Quartz2.2.3做持久化,启动程序后,控制台报错问题

    该错误是由mysql connector java jar版本太低导致 MLog clients using log4j logging Initializing c3p0 0 9 1 1 built 15 March 2007 01 32
  • 虚拟DOM中key的作用

    key是虚拟DOM的标识 如果数据发生变化时 Vue会根据 新数据 生成新虚拟DOM 和 旧虚拟DOM 的差异对比 如果旧虚拟DOM和新虚拟DOM的key值相同 并且虚拟DOM内容没有变 就直接使用原来的真实DOM 如果虚拟DOM中的内容变
  • PLC软元件2

    1 概述 上篇文章主要讲述了PLC中最基本的输入和输出软元件 同时在文章最后以最基本的输入和输出软元件完成一个比较基础的自锁和互锁功能 不太清楚的同学可以翻看上一篇文章 那PLC只有这些软元件么 其实远远不止 上次文章也讲了基本上MCU所具
  • ICCV 2023

    导读 TL DR 本文提出了FeatEnHancer 一种用于低光照视觉任务的增强型多尺度层次特征的新方法 提议的解决方案重点增强相关特征 通过提供强大的语义表示 使其优于现有的低光照图像增强方法 该方法不仅改进了单个特征的质量 而且还有效
  • ctfshow 文件包含

    目录 web78 web79 web80 81 web82 web83 web78 简单的伪协议文件包含 payload php filter convert base64 encode resource flag php web79 pa
  • npm install安装sharp包失败

    初次使用Lincm 使用后端koa框架初始化环境报错 npm config set sharp binary host https npm taobao org mirrors sharp npm config set sharp libv
  • Groovy与Java的不同点

    本文参考自Groovy文档 Differences with Java 所有代码都是Groovy文档中的 也可以将本文看做英文源文档的简略翻译 Groovy设计时目标之一就是让Java程序员快速习惯Groovy 不过在Groovy中也有很多
  • C#数据库MS SQL打开关闭演示

    书上记的比喻 有助于记忆 ADO NET类 CONNECTION对象好比伸入水中的水龙头 保持与水的接触 只有它与水进行了连接 其它对象才可以抽到水 COMMAND对象则像抽水机 为抽水提供动力和执行方法 先通过水龙头 然后把水返回给上面的
  • linux下rename函数用法,Linux学习之关于rename的用法

    linux下的rename是有两个版本的 一个是C语言版本 一个是Perl语言版本 如何判断当前是哪个版本 输入man rename 看到第一行是 RENAME 1 Linux Programmer s Manual RENAME 1 这个
  • 架构简洁之道:从阿里开源应用架构COLA说起

    导读 COLA 的主要目的是为应用架构提供一套简单的可以复制 可以理解 可以落地 可以控制复杂性的 指导和约束 在实践中作者发现 COLA 在简洁性上仍有不足 因此给 COLA 做了一次 升级 在这次升级中 没有增加任何新的功能 而是尽量多
  • 通过user-agent判断用户是用QQ、微信还是支付宝打开链接或二维码

    通过user agent判断用户是用QQ 微信还是支付宝打开链接或二维码 function is weixn qq var ua navigator userAgent toLowerCase if ua match MicroMessen
  • 表格嵌套表格css_HTML5和CSS3的登录和注册表格

    表格嵌套表格css View demo 查看演示 Download Source 下载源 In this tutorial we are going to create two HTML5 forms that will switch be
  • 快速理解Faster RCNN

    Faster RCNN 1 网络结构 2 锚框生成 3 RPN结构 4 Roi pooling 5 分类和回归任务 6 损失函数 7 训练流程 1 网络结构 首先输入图像 进行尺度裁剪成固定的M N 如果比例不匹配可以先填充再裁剪 back
  • 云计算入门——IT架构九重天

    文章目录 一 概述 二 各层简述 2 1 基础层 2 2 计算机网络 2 3 存储层 2 4 服务器层 2 5 操作系统层 2 6 数据库层 2 7 中间件 运行库 2 8 应用软件 2 9 数据层 一 概述 一个公司搭建IT应用一般都会涉
  • [ElasticSearch]间隔搜索IntervalsQuery及JavaSDK简单调用

    1 概念 intervals query 允许用户精确控制查询词在文档中出现的先后关系 实现了对terms顺序 terms之间的距离以及它们之间的包含关系的灵活控制 通过intervals query 间隔搜索 我们可以完成各个terms在
  • MYSQL导出数据出现The MySQL server is running with the --secure-file-priv option

    今天尝试使用 into outfile导出数据的时候出现错误 The MySQL server is running with the secure file priv option so it cannot execute this st
  • 服务器r730系统备份软件,r730服务器

    r730服务器 内容精选 换一换 创建外表语法 CREATE FOREIGN TABLE SQL on Hadoop or OBS 中 需指定一个与MRS数据源连接相关联的外部服务器 当您通过GaussDB DWS 管理控制台创建MRS数据
  • 区块链为每一笔交易盖上时间戳

    黄老邪在传授记账方法时 要求居民将发生在桃花岛上的每一笔交易都记录下来 并且要求他们将交易发生的时间也一并记录在账本上 这就相当于区块链为每一笔交易在发生时盖上了时间戳 在区块链中 时间戳的应用是对每一次交易记录的认证 它就像交易合同公证一
  • 判断map集合是否为空和是否为null

  • 稀疏矩阵转置(C语言)

    最近有数据结构实验课了 还得学一学数据结构喽 以后就把学习经过贴上来了 稀疏矩阵 当一个数组中大部分元素为 或者为同一个值的数组时 可以使用稀疏数组来保存该数组 稀疏数组的处理方法 1 记录数组一共有几行几列 有多少个不同的值 假设有sum