稀疏矩阵----三元组顺序表建立、转置

对于稀疏矩阵,采用压缩存储方法时,只存储非0元素。必须存储非0元素的行下标值、列下标值、元素值。因此,一个三元组(i, j, aij)唯一确定稀疏矩阵的一个非零元素。

若以行序为主序,稀疏矩阵中所有非0元素的三元组,就可得构成该稀疏矩阵的一个三元组顺序表。

 


 代码:

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR -1
#define MAXSTRLEN 255
typedef int Status;
typedef int ElemType;
 typedef struct{
    int row;  //行下标
    int col;   //列下标
    ElemType value; //元素值
 }Triple;
 typedef struct{
    int rn; //行数
    int cn; //列数
    int tn; //元素值
    Triple data[MAXSTRLEN];
 }TMatrix;

 void TransMatrix(TMatrix A, TMatrix *B){
    int p, q, col;
    B->cn = A.rn;
    B->rn = A.cn;
    B->tn = A.tn;
    if(A.tn == 0)
        printf("A表为空表");
    q = 0;
    for(col = 0; col < A.tn; col++){
            //A的列数 一列一列变成B的行数
        for(p = 0; p < A.tn; p++){
            //循环次数是非零元素的个数
            if(A.data[p].col == col){
                B->data[q].row = A.data[p].col;
                B->data[q].col = A.data[p].row;
                B->data[q].value = A.data[p].value;
                q++;
            }

        }


    }


 }

int main()
{
    TMatrix A, B;
    int i, j, e;
    int k = 0;
    printf("输入三元组 矩阵(行数,列数,值)\n");

    //EOF 输入结束 下一行Ctrl+z enter
    while(scanf("%d%d%d", &i,&j,&e) != EOF ){

        A.data[k].row = i -1;
        A.data[k].col = j-1;
        A.data[k].value = e;
        k++;
        A.tn = k;
    }
    printf("矩阵为\n");
    for(i = 0; i < A.tn; i++){
        printf("%3d%3d%3d\n", A.data[i].row+1, A.data[i].col+1, A.data[i].value);


    } printf("转置后:\n");
    TransMatrix(A, &B);
    for(i = 0; i < B.tn; i++){
        printf("%3d%3d%3d\n", B.data[i].row+1, B.data[i].col+1, B.data[i].value);


    }



    return 0;
}

结果:

 

 

  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值