【C 数据结构】以三元组表形式表示稀疏矩阵,实现两个矩阵的加法、减法

这篇具有很好参考价值的文章主要介绍了【C 数据结构】以三元组表形式表示稀疏矩阵,实现两个矩阵的加法、减法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目的:以三元组表形式表示稀疏矩阵,实现两个矩阵的加法、减法。

实验步骤

1. 定义三元组存储结构

2. 输入稀疏矩阵:首先应输入矩阵的行数、列数和非零项的数目,并判别给出的两个矩阵的行、列数对于所要求进行的运算是否匹配。可设矩阵的行数和列数均不超过20。接下来逐个输入表示非零元的三元组(i, j, aij),程序可以对三元组的输入顺序加以限制,如按行优先。

3. 进行相关的运算,如加法或减法。

4. 输出结果矩阵(以阵列的形式输出运算结果)。

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

#define MAXSIZE 20
#define OK 1
#define ERROR 0

//用来存放三元组中每一个非零元素的信息
typedef struct {
    int r, c; //行号 列号
    int d;//表示非零元的值
} TupNode;

//用来存放三元组矩阵的信息
typedef struct {
    int rows, cols, nums; //行数 列数 非零元素个数
    TupNode data[MAXSIZE];
} TSMatrix;

//将三元元组表转换成二维数组
void conversionMatrix(TSMatrix *t, int A[t->rows][t->cols]) {
    for (int i = 0; i < t->rows; i++) {
        for (int j = 0; j < t->cols; j++) {
            A[i][j] = 0; //全部元素赋值0
        }
    }
    for (int i = 0; i < t->nums; i++) {
        A[t->data[i].r - 1][t->data[i].c - 1] = t->data[i].d;
    }
}

//打印矩阵
void printMatrix(TSMatrix *t) {
    int A[t->rows][t->cols];
    conversionMatrix(t, A);
    for (int i = 0; i < t->rows; i++) {
        for (int j = 0; j < t->cols; j++) {
            printf("%2d ", A[i][j]);//以矩阵形式打印
        }
        printf("\n");
    }
    printf("\n");
}

//输入三元组表
int inputMatrix(TSMatrix *t, int n) {
    printf("请输入第%d个元组的信息(依次输入行数,列数,非零元个数):\n", n);
    scanf("%d%d%d", &t->rows, &t->cols, &t->nums);
    //printf("t->rows=%d, t->cols=%d, t->nums=%d\n", t->rows, t->cols, t->nums);
    int i, j;
    printf("请输入每个三元组矩阵的非零元素的信息:\n");
    for (i = 0, j = 0; i < t->nums; i++, j++) {
        printf("依次输入第%d个三元组第%d个非零元素行标,列标,数值", n, i + 1);
        scanf("%d%d%d", &t->data[i].r, &t->data[i].c, &t->data[i].d);
        // printf("t->data[%d].r=%d,t->data[%d].c=%d, t->data[%d]=%d\n", i,t->data[i].r, i,t->data[i].c, i,t->data[i].d);
    }
    printf("第%d个三元组表矩阵如下:\n", n);
    printMatrix(t);
    return OK;
}

//三元组表相加
void calculatingMatrix(TSMatrix *t1, TSMatrix *t2, TSMatrix *t) {
    if (t1->rows != t2->rows || t1->cols != t2->cols) {
        printf("error,该矩阵不能进行加减运算,程序退出\n");
        exit(0);
    }
    int A[t1->rows][t1->cols];
    int B[t2->rows][t2->cols];
    int C[t1->rows][t1->cols];
    int C1[t1->rows][t1->cols]; //存储相减后结果
    conversionMatrix(t1, A);
    conversionMatrix(t2, B);
    printf("相减后三元组表矩阵如下:\n");
    for (int i = 0; i < t1->rows; i++) {
        for (int j = 0; j < t1->cols; j++) {
            C1[i][j] = A[i][j] - B[i][j];
            printf("%2d ", C1[i][j]);//以矩阵形式打印
        }
        printf("\n");
    }
    printf("相加后三元组表矩阵如下:\n");
    for (int i = 0; i < t1->rows; i++) {
        for (int j = 0; j < t1->cols; j++) {
            C[i][j] = A[i][j] + B[i][j];
            printf("%2d ", C[i][j]);//以矩阵形式打印
        }
        printf("\n");
    }
}

int main() {
    TSMatrix t1;
    TSMatrix t2;
    TSMatrix t;
    inputMatrix(&t1, 1);
    inputMatrix(&t2, 2);
    calculatingMatrix(&t1, &t2, &t);

}

稀疏矩阵减法思路,算法,c语言,数据结构

 稀疏矩阵减法思路,算法,c语言,数据结构文章来源地址https://www.toymoban.com/news/detail-531810.html

到了这里,关于【C 数据结构】以三元组表形式表示稀疏矩阵,实现两个矩阵的加法、减法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】三元组表的定义以及快速转置

    📒博客主页: 程序员好冰 🎉欢迎 【点赞👍 关注🔎 收藏⭐️ 留言📝】 📌本文由 程序员好冰 原创,CSDN 首发! 📆入站时间: 🌴2022 年 07 月 13 日🌴 ✉️ 是非不入松风耳,花落花开只读书。 💭推荐书籍:📚《Java编程思想》,📚《Java 核心技术卷》 💬参考在线编程网

    2024年02月06日
    浏览(29)
  • 用三元组表实现稀疏矩阵的基本操作

    目录 问题描述 数据结构 算法设计 算法流程图  源代码  运行结果      ​    编写程序用三元组表实现稀疏矩阵的按列转置操作。 本设计使用三元组表实现。 程序中设计了三个函数: 1.函数InitSPNode()用来建立一个稀疏矩阵的三元组表。     首先输入行数、列数和非零元的

    2024年02月03日
    浏览(32)
  • 数组:矩阵快速转置 矩阵相加 三元组顺序表/三元矩阵 随机生成稀疏矩阵 压缩矩阵【C语言,数据结构】(内含源代码)

    目录 题目: 题目分析: 概要设计: 二维矩阵数据结构: 三元数组三元顺序表顺序表结构: 详细设计: 三元矩阵相加: 三元矩阵快速转置: 调试分析: 用户手册: 测试结果:  源代码: 主程序:  头文件SparseMatrix.h:  头文件Triple.h: 总结: 稀疏矩阵A,B均采用 三元组

    2023年04月26日
    浏览(52)
  • [数据结构(C语言版本)上机实验]稀疏矩阵的三元组顺序表压缩存储以及转置实现(含快速转置)

    实现效果: 1、编写程序任意 输入 一个稀疏矩阵,用 三元组顺序表 压缩存储 稀疏矩阵 。 2、对稀疏矩阵进行 转置 , 输出 转置后的矩阵。 对应《数据结构(C语言版)》 第5章 数组与广义表 实验: 1、 掌握下三角矩阵的输入、输出、压缩存储算法; 2、 理解稀疏矩阵的三元

    2024年02月03日
    浏览(34)
  • 数据结构第七周 :(稀疏矩阵快速转置 + 简单文本编辑器 + 三元组的矩阵加法 + 九宫格数独游戏 + 数组主元素 + 螺旋数字矩阵 + 蛇形矩阵)

    【问题描述】 稀疏矩阵的存储不宜用二维数组存储每个元素,那样的话会浪费很多的存储空间。所以可以使用一个一维数组存储其中的非零元素。这个一维数组的元素类型是一个三元组,由非零元素在该稀疏矩阵中的位置(行号和列号对)以及该元组的值构成。而矩阵转置就

    2023年04月21日
    浏览(32)
  • 稀疏矩阵的三元组表示----(算法详解)

    目录 基本算法包括:(解释都在代码里) 1.创建 2.对三元组元素赋值 3.将三元组元素赋值给变量 4.输出三元组 5.转置(附加的有兴趣可以看看) 稀疏矩阵的概念:矩阵的非零元素相较零元素非常小时,这个矩阵就叫稀疏矩阵。 稀疏矩阵可以用 三元组表示 和 十字链表表示

    2024年01月21日
    浏览(28)
  • PTA:三元组顺序表表示的稀疏矩阵转置Ⅱ

    三元组顺序表表示的稀疏矩阵转置Ⅱ。设a和b为三元组顺序表变量,分别表示矩阵M和T。要求按照a中三元组的次序进行转置,并将转置后的三元组置入b中恰当的位置。 输入第1行为矩阵行数m、列数n及非零元素个数t。 按行优先顺序依次输入t行,每行3个数,分别表示非零元素

    2024年02月06日
    浏览(27)
  • 初识数据结构之三元组

    在初步了解了数据结构的研究内容后,做一个简单的尝试——三元组。 三元组是数据结构里的一个基本概念。主要是用来存储稀疏矩阵的一种压缩方式,也叫三元组表。 三元组中存放三个值(x,y,z)分别代表矩阵的行、列、值。 ADT Triplet { 数据对象:D = {e1,e2,e3 | e1,e2,e3属于E

    2024年02月11日
    浏览(26)
  • 数据结构——稀疏矩阵

    在矩阵中,若数据为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反的叫做稠密矩阵。 将棋盘看作一个二维数组,在棋子落盘时,要记录该棋子落下的坐标,其他坐标的值不做记录,默认为0。由于记录很多无意义的数据

    2024年02月03日
    浏览(29)
  • 【开卷数据结构 】稀疏矩阵

    🌺稀疏矩阵 🍁矩阵与稀疏矩阵的定义 🌺稀疏矩阵的转置 🍁详细思路 🍀思路一 🍀思路二 🌺稀疏矩阵的乘法 🍁详细思路 Q:什么是矩阵 A: 数学上,一个 矩阵 由 m 行 n 列的元素组成,是一个 m 行,n 列的表,m 和 n 是矩阵的 维度 。一般地,写作 mxn(读作“m乘n”)来指

    2024年01月19日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包