十字链表法 存储 稀疏矩阵

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100

//十字链表法 存储 稀疏矩阵

//普通节点
typedef struct OLNode{
    int col,row;
    float value;
    struct OLNode *right,*down;
}OLNode;

//总头结点--存放:行数,列数,非0元数(k),指向右、下基地址的指针
typedef struct CrossList{
    int m,n,k;
    OLNode *rhead,*chead;
}CrossList;

int createCrossListMat(float A[][MAXSIZE],int m,int n,int k,CrossList &M){
    //置空指针--可能是第二次调用此函数,所以要置空
    if(M.rhead) free(M.rhead);
    if(M.chead) free(M.chead);

    M.k=k;
    M.m=m;
    M.n=n;

    //申请基地址空间,没内存则返回
    if(!(M.rhead=(OLNode*)malloc(n*sizeof(OLNode))))
        return 0;
    if(!(M.chead=(OLNode*)malloc(n*sizeof(OLNode))))
        return 0;

    //基地址置空
    for(int i=0;i<n;++i){
        M.rhead[i].down=NULL;
        M.rhead[i].right=NULL;
    }
    for(int j=0;j<m;++j){
        M.chead[j].down=NULL;
        M.chead[j].right=NULL;
    }

    //定义辅助地址,实时更新,指向非零新生结点
    OLNode *temp_c[n];
    for(int i=0;i<n;++i){
        temp_c[i] = &(M.rhead[i]);
    }

    //开始存储
    for(int i=0;i<m;++i){
        //定义辅助地址,实时更新,指向非零新生结点
        OLNode *r = &(M.chead[i]);
        for(int j=0;j<n;++j){
            if(A[i][j]!=0){
                OLNode *p=(OLNode*)malloc(sizeof(OLNode));
                p->value=A[i][j];
                p->row=i;
                p->col=j;
                p->right=NULL;
                p->down=NULL;

                temp_c[j]->down=p;
                temp_c[j]=p;

                r->right=p;
                r=p;
            }
        }
    }

    return 1;
}

int main(){
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值