稀疏矩阵的三元组行逻辑链接的顺序表存储结构表示及实现

#define MAX_SIZE 100
#define MAX_RC 20

struct Triple
{
    int i, j;//行下标,列下标
    ElemType e;//非零元素值
};

struct RLSMatrix
{
    Triple data[MAX_SIZE + 1];//非零元三元组表,data[0]未用
    int rpos[MAX_RC + 1];//各行第1个非零元素的位置表
    int mu, nu, tu;//矩阵的行数,列数,非零元个数
};

int comp(int c1, int c2){
  //比较这个数c1和c2的大小关系
    if (c1 < c2)
        return -1;
    if (c1 == c2)
        return 0;
    return 1;
}

Status CreateSMatrix(RLSMatrix &M){
  //创建稀疏矩阵M
    int i, j;
    Triple T;
    Status k;
    printf("请输入矩阵的行数,列数,非零元素个数:");
    scanf("%d,%d,%d", &M.mu, &M.nu, &M.tu);
    if (M.tu > MAX_SIZE || M.mu > MAX_RC)//矩阵M的非零元个数太多或行数太多
        return ERROR;
    M.data[0].i = 0;//为以下比较做准备
    for (i = 1; i <= M.tu; i++)//依次输入M.tu个非零元素
    {
        do
        {
            printf("请按行序顺序输入第%d个非零元素所在的行(1~%d),列(1~%d),元素值:", i, M.mu, M.nu);
            scanf("%d,%d,%d", &T.i, &T.j, &T.e);
            k = 0;//输入值的范围正确的标志
            if (T.i < 1 || T.i > M.mu || T.j < 1 || T.j > M.nu)//行或列超出范围
                k = 1;
            if (T.i < M.data[i - 1].i || T.i == M.data[i - 1].i && M.data[i - 1].j)
                k = 1;//行或列的顺序有错
        } while (k);//输入值的范围不正确则重新输入
        M.data[i] = T;//将输入正确的值赋给M的相应存储单元
    }
    for (i = 1; i <= M.mu; i++)//给rpos[]赋初值1(每行第1个非零元素的初始位置)
        M.rpos[i] = 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值