美文网首页想法简友广场散文
数据结构上机习题5:稀疏矩阵的加法运算

数据结构上机习题5:稀疏矩阵的加法运算

作者: Cache_wood | 来源:发表于2021-07-12 11:07 被阅读0次
#include <stdio.h>
#include <stdlib.h>

typedef struct threetuple{
    int x;//表示非零元素的行标
    int y;//表示非零元素的列标
    int value;//表示非零元的值
}Triple;//用来存放三元组中每一个非零元素的信息

typedef struct infor{
    int col;//列数
    int row;//行数
    int counts;//存放非零元的个数
}Tripledata;//用来存放三元组矩阵的信息

void printtuple(Triple m[],Tripledata n,int A[n.col][n.row]){//以矩阵形式输出两个三元祖
    int i,j;
    for(i=0;i<n.col;i++){
        for(j=0;j<n.row;j++){
           A[i][j]=0;//将所有元素赋值0
        }
    }
    for(i=0;i<n.counts;i++){
        A[m[i].x-1][m[i].y-1]=m[i].value;//把三元组非零元素在对应位置赋值
    }
    for(i=0;i<n.col;i++){
        printf("\n");
        for(j=0;j<n.row;j++){
           printf("%2d",A[i][j]);//以矩阵形式打印
        }
    }
}
void add_print(Tripledata n,int A[n.col][n.row],int B[n.col][n.row]){
    int i,j;
    int C[n.col][n.row];//定义一个新矩阵用来存储相加后的结果。
    printf("\n执行矩阵相加,并打印结果:\n");
    for(i=0;i<n.col;i++){
        for(j=0;j<n.row;j++){
            C[i][j]=A[i][j]+B[i][j];//进行矩阵相加运算
            printf("%-3d",C[i][j]);//相加和打印同时进行
        }
        printf("\n");
    }
}

int main(){
    Tripledata t[2];//定义两个信息结构体来存放矩阵信息
    int i,j;
    for(i=0;i<=1;i++){//行列数信息
        printf("请输入第%d个元组的信息:\n依次输入行数,列数,非零元个数\n",i+1);
        scanf("%d%d%d",&t[i].col,&t[i].row,&t[i].counts);//对非零元素进行赋值操作
    }
    if(t[0].col!=t[1].col||t[0].row!=t[1].row){
        printf("该情况无法相加,程序退出");
        exit(0);
    }
    int a,b;
    a=t[0].counts;
    b=t[1].counts;
    Triple T1[a],T2[b];//定义两个非零元素信息结构体,前者对应A,后者是B
    printf("请输入每个三元组矩阵的非零元素的信息:\n");
    for(i=1,j=0;i<=t[0].counts;j++,i++){//每个三元组的信息;
        printf("依次输入元组1第%d个非零元素行标,列标,数值",i);
        scanf("%d%d%d",&T1[j].x,&T1[j].y,&T1[j].value);
    }
    for(i=1,j=0;i<=t[0].counts;j++,i++){//每个三元组的信息;
        printf("依次输入元组2第%d个非零元素行标,列标,数值",i);
        scanf("%d%d%d",&T2[j].x,&T2[j].y,&T2[j].value);
    }
    int A[t[0].col][t[0].row];//定义一个二维数组来存放矩阵信息
    int B[t[1].col][t[1].row];//同上
    printf("\nA的矩阵形式:");
    printtuple(T1,t[0],A);//以矩阵形式打印A
    printf("\nB的矩阵形式:");
    printtuple(T2,t[1],B);//以矩阵形式打印B
    add_print(t[0],A,B);
    return 0;
}

相关文章

  • 数据结构上机习题5:稀疏矩阵的加法运算

  • NumPy基础之矩阵的运算

    矩阵运算 矩阵运算包括矩阵的加法、减法、乘法(相乘与点乘)、矩阵的转置等,接下来详细讲解矩阵运算。 矩阵的加减法,...

  • 高等代数理论基础27:矩阵的运算

    矩阵的运算 加法 定义:给定两个矩阵 , 称为A与B的和,记作 注: 1.矩阵的加法即矩阵对应元素相加,相加的矩阵...

  • 矩阵的基本运算_线性代数_day11

    矩阵的加法 矩阵的加法就是矩阵的每一个对应项相加 矩阵的数量乘法 矩阵的图形学应用 矩阵的基本运算性质 矩阵的基本...

  • 矩阵

    1. 线性方程组 2. 矩阵定义 3. 矩阵运算 矩阵的加法矩阵的加法 数与矩阵相乘数与矩阵相乘 矩阵与矩阵相乘矩...

  • Slam笔记-李群与李代数

    4.1.1 什么是群? 旋转矩阵R对加法是不封闭的,意思是,对于任意旋转矩阵 、,按照矩阵加法对它俩做加法运算,结...

  • 矩阵的运算及其运算规则

    一、矩阵的加法与减法1、运算规则设矩阵 2、 运算性质 (假设运算都是可行的)满足交换律和结合律交换律 二、矩阵与...

  • 数据结构:稀疏矩阵运算器

    题目:设计一个程序,实现一个能进行稀疏矩阵基本运算的计算器。按照教科书《数据结构(C语言版)》(严蔚敏等)5.3....

  • 三元组压缩存储稀疏矩阵的转置

    数据结构的一道上机题 主要实现快速转置算法 参考博客: 稀疏矩阵的压缩存储及其转置算法 参考博客把思路讲的很清晰了...

  • 矩阵代数(四)- 分块矩阵

    小结 分块矩阵 分块矩阵运算 分块矩阵的逆 分块矩阵 矩阵,也可写成分块矩阵的形状,它的元素是分块(子矩阵) 加法...

网友评论

    本文标题:数据结构上机习题5:稀疏矩阵的加法运算

    本文链接:https://www.haomeiwen.com/subject/uektpltx.html