稀疏矩阵三元组求转置

来源:互联网 发布:吉他谱搜索软件 编辑:程序博客网 时间:2024/06/05 05:58

具体什么是稀疏矩阵,可以参见下面博客

http://blog.csdn.net/tiredoy/article/details/24435443


http://c.biancheng.net/cpp/html/969.html


下面是参考了部分博客后,自己实现的代码,其中有好多问题,在调试解决的过程中,解决了问题,并收获了很多。参见具体注释。



#include <stdio.h>#include <stdlib.h>#define SMAX 1024 /*一个足够大的数*///typedef datatype int;/* 该程序的意图是,输入一个稀疏矩阵的三元组表示的数据,根据其三元组表示形式求其转置*///表示每个三元组元素的结构体typedef struct{    int i,j;             //元素的行和列信息    int v;<span style="white-space:pre"></span>//存储 i 行 j 列上的元素的值}Node;//表示某个三元组的结构体typedef struct{    int m,n,len;                  //该三元组存储的矩阵 有 m 行 n 列    Node data[SMAX];<span style="white-space:pre"></span>// 该三元组中 最多有 SMAX 个节点}SMatrix;//通过键盘输入的方式,建立三元组//需要注意的是,如果M的类型是 SMtrix *  时,其操作其数据的方式应该是 M->m//若 M 的类型是 SMatrix 时,则操作数据的方式时 M.mvoid createMatrix(SMatrix *M){    printf("请输入稀疏矩阵的行数:");    scanf("%d",&(M->m));    printf("请输入稀疏矩阵的列数:");    scanf("%d",&(M->n));     printf("请输入表示稀疏矩阵的三元组的行数:");     scanf("%d",&M->len);     int i;     for(i=1;i<=M->len;i++){        printf("请输入第%d个元素的行号列号及其元素的值",i);        scanf("%d %d %d",&M->data[i].i,&M->data[i].j,&M->data[i].v);     }}// 该子函数赋值打印一个三元组void printSmtrix(SMatrix *M){    int p;    for(p=1;p<=M->len;p++){        printf("%d %d %d",M->data[p].i,M->data[p].j,M->data[p].v);        printf("\n");    }}//需要注意的是,如果M的类型是 SMtrix *  时,其操作其数据的方式应该是 M->m//若 M 的类型是 SMatrix 时,则操作数据的方式时 M.m// 该子函数负责 根据三元组求其转置矩阵,注意其形参分别为 SMatrix 类型 和 SMatrix* 类型//SMatrix 类型的形参 M 主要负责带过来其需要利用到的原始三元组数据//SMatrix* 类型的形参 N 主要负责根据M 中的数据得到转置后的三元组,之所以N 为指针类型,是因为,其//经过处理后的数据,我们在打印和主函数中都需要用到,所以此时传递过来地址是非常有必要的,我们在其他函数中拿到这个地址,就能//对其中的数据进行操作了,这正是指针的魅力所在。void transMatrix(SMatrix M,SMatrix *N){    N->m = M.n;    N->n=M.m;    N->len=M.len;    int p,q;    int j=1;    for(p=1;p<=M.len;p++){        for(q=1;q<=M.len;q++){            if(M.data[q].j==p){                N->data[j].i=M.data[q].j;                N->data[j].j=M.data[q].i;                N->data[j].v=M.data[q].v;                j++;            }        }    }      printSmtrix(N);}//该程序中,务必要注意的是 M N &M & N 等数据的类型,其具体类型是什么,可通过CODEBLOCK中的debug功能,打断点查看//不失为一种好的办法int main(){    SMatrix M,N;    createMatrix(&M);     printSmtrix(&M);    transMatrix(M,&N);    printSmtrix(&M);    printSmtrix(&N);}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 网上买的手机没发票怎么办 手机店花呗分期额度不够怎么办 买了手机没有开票怎么办 在京东上买苹果手机没有发票怎么办 买到苹果演示机怎么办 京东白条借不了怎么办 买了东西不给退怎么办 邮政储蓄银行买东西多扣钱了怎么办 快递送错地方了怎么办 菜鸟驿站超过5天怎么办 消费者买到不合格产品怎么办 如果买到不合格的产品怎么办 买到不合格的种子怎么办 买到不合格的空调怎么办 买到不合格的家具怎么办 灭火器买到不合格产品怎么办 路边买到假手机怎么办 网上买的手机屏幕碎了怎么办 天猫订单删除了怎么办 华为入职预约满怎么办 三星c5玩王者荣耀卡怎么办 三星s8背部碎了怎么办 保修期内发动机坏了怎么办 6s主板进水了怎么办 新买的狗晚上叫怎么办 官网手机坏了怎么办 小米商城买手机不发货怎么办 小米商城分期额度不够怎么办 京东买家未退款怎么办 京东自营不退款怎么办 苏宁易购的无门槛15元怎么办 小米5shome键失灵怎么办 苹果电量用的快怎么办 苹果5s掉电快怎么办 小米5s返回键失灵怎么办 苹果5s漏电是怎么办 苹果6s手机漏电怎么办 5s返回键失灵怎么办 苹果5s返回键失灵怎么办 小米5返回键失灵怎么办 小米手机返回键失灵怎么办